取决于哪个submit
用户选择的按钮,(Cat
and Dog
在本例中),我想使用正确的 http 动词将表单提交到正确的控制器操作。
在本例中,只有一个文本输入。如果用户按下Cat
我想POST
to Cats#create
and if Dog
to PUT
to Dogs#update
.
我将如何构建表单?
Edit
使用formaction https://stackoverflow.com/a/32536941/2909897我能够的属性PUT
to Dogs#update
<%= form_for(cat) do |f| %>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="actions">
<%= f.submit "Cat" %>
<%= f.submit "Dog", formaction: dog_path(Dog.first) %>
<%#= f.submit "Cat", name: 'route_to[cat]' %>
<%#= f.submit "Dog", name: 'route_to[dog]' %>
</div>
<% end %>
问题是我想要POST
to Dogs#create
,这可能吗?formaction
?
Edit
有一个铁路广播公司 http://railscasts.com/episodes/38-multibutton-form?autoplay=true关于根据按下的按钮的名称构建控制器的逻辑。但我想将有关 HTTP 动词、控制器和操作的逻辑放在提交按钮本身中。这可能吗?
在本例中创建一个Cat
并更新一个Dog
足够相关,因此在CatsController
with a 案例陈述 http://www.skorks.com/2009/08/how-a-ruby-case-statement-works-and-what-you-can-do-with-it/并使用:name
属性在submit
button.
例如:
应用程序/视图/猫/new.html.erb:
<%= form_tag(cats_path, multipart: true, role: "form") do %>
<%= button_tag 'Cat', name: 'route_to[cat]'%>
<%= button_tag 'Dog', name: 'route_to[dog]' %>
<% end %>
应用程序/控制器/cats_controller.rb:
def create
case route_to params
when :cat
# create a cat
when :dog
# update a dog
end
end
.
.
.
private
def route_to params
params[:route_to].keys.first.to_sym
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)