@Pavan
有直接的答案,但如果你通过它们各自的submit
价值评估表单提交,你有一个重大问题与你的格局。
表
形式应该是值传递给控制器,然后将填充模式的方式。你不应该基于这些值来确定的行动,除非你有不同的功能...
#app/views/posts/index.html.erb
<% @posts.each do |post| %>
<%= form_for post do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
<% end %>
以上将创建多种形式,所有提交给posts#update
方法:
#app/controllers/posts_controller.rb
class PostsController < ApplicationController
def update
@post = Post.find params[:id]
@post.update post_params
end
private
def post_params
params.require(:post).permit(:x, :y, :z)
end
end
的值里面的那些形式没有关系,也没有将它们发送到哪个对象post
;他们都将以完全相同的方式进行评估。
-
操作
解决这个问题的另一种方式是让单独行动,为不同的形式:
#config/routes.rb
resources :posts do
patch :update_2, on: :member
end
#app/controllers/posts_controller.rb
class PostsController < ApplicationController
def update_2
@post = Post.find params[:id]
@post.param = "value"
@post.update post_params
end
end
#app/views/posts/show.html.erb
<%= form_for @post, url: posts_update_2_path(@post) do |f| %>
<%= f.submit %>
<% end %>
如果您需要使用不同的PARAMS /变量值的/ etc ......为什么不用两条独立的路线创建两个单独的控制器操作,并将每个表单指向各自的操作? –
@SunnyK一个控制器从params:category_id获取类别id,然后其他控制器从params:id中获取它。当信息传递给PARAMS:category_id它不能找到参数,因为它存储在PARAMS:ID改变路线或参数会打破太多的编码,所以这是一个快速简单的解决方案,一个小问题我不想花太多时间。 – Rob