有没有办法让我只有动作而没有视图

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