【发布时间】:2015-06-24 12:10:47
【问题描述】:
我有一个 Rails 4 应用程序,其事物模型具有 3 个属性:attr_1、attr_2、attr_3。
我想要两个编辑表单:
- 第一个会更新 attr_1 和 attr_2
- 第二个只会更新 attr_3
我在 things_controller.rb 中写了四个方法:
def edit
#edit form for attr_1 & attr_2
end
def edit_attr_3
#edit form for attr_3 only
end
def update
#update attr_1 & attr_2
end
def update_attr_3
#update attr_3 only
end
这是我的 routes.db
resources :things do
member do
get :edit_attr_3
put :update_attr_3
end
end
现在,GET 到两个编辑视图都可以工作(/things/:id/edit 和 /things/:id/edit_attr_3),但在提交时,thing#update 表单会被调用两次(thing#update_attr_3 永远不会被调用)
请问如何才能将 thing#edit_attr_3 操作链接到 thing#update_attr_3 ?
编辑:
回答,感谢Ross 和Steve Klein:
在我看来,我使用的是bootstrap_form_for。通常 :url 参数是可选的,因为标准编辑/更新是按约定链接的。在自定义编辑或更新动作的情况下,需要指定更新路径。
<%= bootstrap_form_for @thing, url: update_attr_3_thing_path(@thing) do |f| %>
<% end %>
【问题讨论】:
-
您可以发布
edit_attr_3视图(我假设称为edit_attr_3.html.erb)吗?不确定发生了什么,但您可以在表单中使用:url选项指定控制器路径。 -
我正在为面临相同问题的其他人发布 edit_attr_3 视图,但史蒂夫您是对的,我的表单中缺少 :url 选项。谢谢!
-
很高兴你把它整理好了@Sag
标签: ruby http ruby-on-rails-4 routes