2016-01-21 42 views
1

在一个页面上有两种表单。我希望控制器中的if else语句根据提交的表单使用不同的参数和变量值。从谷歌搜索,我遇到的最好的是在提交按钮上有一个值。Rails:如何查看视图中的哪个表单提交

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

如果这是一种似是而非的方式,我无法找到如何使if else语句来检查提交值是否为'x'。

喜欢的东西

if submit.value == 'x' 
    do something 
else 
    do something else 
end 

真的不知道。如果在控制器中有一个if else语句的另一种方式是通过使用id或名字或任何我很高兴听到的形式来提交巫婆表单。

+3

如果您需要使用不同的PARAMS /变量值的/ etc ......为什么不用两条独立的路线创建两个单独的控制器操作,并将每个表单指向各自的操作? –

+0

@SunnyK一个控制器从params:category_id获取类别id,然后其他控制器从params:id中获取它。当信息传递给PARAMS:category_id它不能找到参数,因为它存储在PARAMS:ID改变路线或参数会打破太多的编码,所以这是一个快速简单的解决方案,一个小问题我不想花太多时间。 – Rob

回答

1

值的提交按钮可以帮助进行访问的params[:commit],所以你可以用它来检查提交表单d。

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

这是答案 –

0

您可以使用类似

<%=f.submit "Basic update", name: "basic-update" %> 
<%=f.submit "Security update", name: "security-update" %> 

,然后检查你的控制器:

if params.has_key? "security-update" 
    #do something 
elsif params.has_key? "basic-update" 
    #do another thing 
end 
+0

@Pavan你确定?它为我工作,测试并告诉我。 – DevMarwen

1

@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 %> 
+0

我会使用2个控制器,但一种形式是物品,另一种是类别。类别有很多项目,即时通讯使用类别视图,所以如果我将项目表单传递给项目控制器,它希望params:category_id为类别id,但类别id在params:id中。我糟糕的嵌套资源导致了这个问题。但是我并没有真正地将它们传递给一个控制器并做一个if else语句,数据最终被提交,并且它比修改parmas或路由导致其他事情中断更快。我是唯一一个阅读该编码的人;) – Rob

相关问题