有没有办法让我只有动作而没有视图
Is there a way I can have only action without view
在我看来,有一个 link_to
到像 random_path
这样的命名路由。因此,当用户单击 link 时,它将通过一个操作转到一个特定的控制器,我正在其中写入一个数据库。它真的不需要渲染视图。 但是拥有视图模板似乎是强制性的。 Is there a way to avoid having the view.
<%= link_to bla_path do %>
<% end %>
在routes.rb
get 'bla' => 'contr#act'
在控制器中
in cont_controller.rb
def act
Model.create(name: "bla")
# I don't need the view for this.
end
是的,你可以通过渲染 json: nil, status: :ok
示例代码:
def act
Model.create(name: "bla")
render json: nil, status: :ok
end
http 协议的工作方式是您必须响应每个请求。但是,您可以使用空白消息进行响应,在 rails 中最简单的方法是添加:
head :ok
在你的任何地方。
控制器的操作需要向浏览器发送回某种 http 响应。如果您到达操作方法(和任何过滤器)的末尾而没有调用发送响应的方法,例如 'render' 或 'head',默认行为是查找要呈现的视图模板,与动作同名。
@kajal 建议调用 'render' 以生成包含最少内容和 200(正常)状态代码的响应。这似乎是一种合理的方法,尽管您同样可以渲染一个空字符串或表示操作成功的字符串,方法是:
render plain: "Ok"
你说"But having the view template seems to be mandatory",但你没有解释你为什么这么想。您是否收到某种错误消息?如果有,能说说是什么吗?
你也可以写下你的动作。
def act
Model.create(name: "bla")
render :nothing => true
end
如果您需要return返回相同的操作,只需写
def act
Model.create(name: "bla")
redirect_to :back
end
在我看来,有一个 link_to
到像 random_path
这样的命名路由。因此,当用户单击 link 时,它将通过一个操作转到一个特定的控制器,我正在其中写入一个数据库。它真的不需要渲染视图。 但是拥有视图模板似乎是强制性的。 Is there a way to avoid having the view.
<%= link_to bla_path do %>
<% end %>
在routes.rb
get 'bla' => 'contr#act'
在控制器中
in cont_controller.rb
def act
Model.create(name: "bla")
# I don't need the view for this.
end
是的,你可以通过渲染 json: nil, status: :ok 示例代码:
def act
Model.create(name: "bla")
render json: nil, status: :ok
end
http 协议的工作方式是您必须响应每个请求。但是,您可以使用空白消息进行响应,在 rails 中最简单的方法是添加:
head :ok
在你的任何地方。
控制器的操作需要向浏览器发送回某种 http 响应。如果您到达操作方法(和任何过滤器)的末尾而没有调用发送响应的方法,例如 'render' 或 'head',默认行为是查找要呈现的视图模板,与动作同名。
@kajal 建议调用 'render' 以生成包含最少内容和 200(正常)状态代码的响应。这似乎是一种合理的方法,尽管您同样可以渲染一个空字符串或表示操作成功的字符串,方法是:
render plain: "Ok"
你说"But having the view template seems to be mandatory",但你没有解释你为什么这么想。您是否收到某种错误消息?如果有,能说说是什么吗?
你也可以写下你的动作。
def act
Model.create(name: "bla")
render :nothing => true
end
如果您需要return返回相同的操作,只需写
def act
Model.create(name: "bla")
redirect_to :back
end