【问题标题】:Rails 4 : Custom routes, multiple edit forms for a single modelRails 4:自定义路线,单个模型的多个编辑表单
【发布时间】: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 ?


编辑:

回答,感谢RossSteve 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


【解决方案1】:

如果没有看到表单的代码,很难说...但是如果您使用的是form_for,那么在这两种情况下它将映射到更新操作的路由(使用不是新对象的对象)。

要使其与您的独特更新操作一起使用,您必须指定 form_for 应使用的 url。比如:

<%= form_for @thing, url: things_update_attr_3_path(@thing) do |f| %>
  # other form stuff .......

您可以在命令提示符下使用bundle exec rake routes 来查看您当前的路线是什么,以便您现在可以在表单中使用什么路线助手。

【讨论】:

  • 就是这样。我没有在我的 edit_attr_3 表单中指定自定义 update_attr_3 url,因为对于标准显示/编辑操作,这不是必需的。问题解决了 !谢谢。 :)
猜你喜欢
  • 2014-04-18
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
相关资源
最近更新 更多