假设我有一个文章模型,在文章"新"视图中我有两个按钮,"发布"和"保存草稿".
我的问题是如何知道在控制器中单击了哪个按钮.
我已经有了解决方案,但我认为必须有更好的方法.我目前在视图中使用的是:
<div class="actions">
<%= f.submit "Publish" %>
<%= f.submit "Save Draft", :name => "commit" %>
</div>
Run Code Online (Sandbox Code Playgroud)
所以在控制器中,我可以使用params [:commit]字符串来处理该操作.
def create
@article = Article.new(params[:article])
if params[:commit] == "Publish"
@article.status = 'publish'
// detail omitted
end
@article.save
end
Run Code Online (Sandbox Code Playgroud)
但我认为使用视图相关字符串并不好.你能告诉我另一种方法吗?
更新:由于这些按钮的形式相同,所以它们都会进入"创建"动作,这对我来说没问题.我想要的是在创建操作中处理它,例如给Article模型一个'status'列并保持'public'或'draft'.
我正在使用backbone.js,效果很好.但我作为javascript模板创建的表单缺少rails csrf保护令牌.如何将其添加到我在javascript中创建的模板中?
所以..
<%= submit_tag 'Save', :name => 'save' %>
<%= submit_tag 'Save to Library', :name => 'library' %>
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中:
with_action do |a|
a.save do
end
a.library do
end
end
Run Code Online (Sandbox Code Playgroud)
问题是只有一个动作被调用...对于两个submit_tags都是同一个...任何想法为什么?
或者我如何获得两个按钮将表单提交给两种不同的方法?
如何在form_for提交时传递网址?我正在尝试使用一个表单,每个按钮指向每个控制器操作,一个是搜索,另一个是创建.是否有可能在同一表单上有2个提交按钮和不同的操作?
<%= form_for @people do |f| %>
<%= f.label :first_name %>:
<%= f.text_field :first_name %><br />
<%= f.label :last_name %>:
<%= f.text_field :last_name %><br />
<%= f.submit(:url => '/people/search') %>
<%= f.submit(:url => '/people/create') %>
<% end %>
Run Code Online (Sandbox Code Playgroud)