Ruby on rails Rails:如何检查视图中提交的表单

Ruby on rails Rails:如何检查视图中提交的表单,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,一页上有两张表格。我希望控制器中的if-else语句根据提交的表单使用不同的参数和变量值。在谷歌搜索中,我遇到的最好的结果就是在提交按钮上有一个值 <%= f.submit "Save" :value => "x" %> 真的不确定。如果有另一种方法可以让控制器中的If-else语句捕获,则通过使用id或名称或我很高兴听到的任何内容提交witch表单。您可以使用 <%=f.submit "Basic update", name: "basic-update" %&

一页上有两张表格。我希望控制器中的if-else语句根据提交的表单使用不同的参数和变量值。在谷歌搜索中,我遇到的最好的结果就是在提交按钮上有一个值

 <%= f.submit "Save" :value => "x"  %> 

真的不确定。如果有另一种方法可以让控制器中的If-else语句捕获,则通过使用id或名称或我很高兴听到的任何内容提交witch表单。

您可以使用

<%=f.submit "Basic update", name: "basic-update" %>
<%=f.submit "Security update", name: "security-update" %>
参数[:commit]
的帮助下,可以访问提交按钮的,因此您可以使用它检查提交的表单

if params[:commit] == 'x' 
    do something
 else
    do something else
 end

@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 %>
这些表单中的值并不重要,也不重要,它们被发送到哪个
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 %>
#config/routes.rb
资源:员额可以
修补程序:更新2,在::member上
结束
#app/controllers/posts_controller.rb
类PostsController<应用程序控制器
def更新2
@post=post.find参数[:id]
@post.param=“值”
@post.update post_参数
结束
结束
#app/views/posts/show.html.erb

如果需要使用不同的参数/变量值/etc。。。为什么不创建两个单独的控制器操作,使用两个单独的路由,并将每个表单指向各自的操作?@SunnyK一个控制器从params:category_id获取类别id,然后另一个控制器从params:id获取类别id。当信息传递到将其作为params:category_id的控制器时,它找不到参数,因为它存储在params:id中。更改路由或参数会中断太多的编码,所以这是一个快速简单的解决方案,我不想花太多时间在这个小问题上。@Pavan你确定吗??它对我有效,测试它并告诉我。我会使用两个控制器,但一个表单用于项目,另一个用于类别。Category有许多项目,我使用的是Category视图,因此如果我将项目表单传递给items controller,它希望类别id使用params:Category\u id,但类别id位于params:id中。我糟糕的嵌套资源导致了此问题。但我并不是真的为把它们都传递给一个控制器并执行if-else语句而烦恼,数据最终会被提交,并且比改变parmas或路由导致其他东西崩溃更快。我是唯一一个读过编码的人;)
#app/views/posts/index.html.erb
<% @posts.each do |post| %>
   <%= form_for post do |f| %>
      <%= f.text_field :name %>
      <%= f.submit %>
   <% end %>
<% end %>
#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
#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 %>