Ruby on rails 轨道上的两个按钮

Ruby on rails 轨道上的两个按钮,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在尝试让两个按钮在rails中为相同的表单工作。我有一个带有添加用户和注册按钮的登录表单。我的控制器中有两个方法已经处理了这两个不同的请求 但是,我阅读了关于使用附加参数来解析以确定调用了哪个按钮的建议。对于这个解决方案,您不需要使用另一个控制器方法进行间接级别的解析吗?我读到一个控制器调用另一个控制器不是好的MVC实践。在这种情况下,在MVC控制器类中调用另一个方法会是一种糟糕的做法吗 我的表格: <%= form_tag("users/delegate", :method=>

我正在尝试让两个按钮在rails中为相同的表单工作。我有一个带有添加用户和注册按钮的登录表单。我的控制器中有两个方法已经处理了这两个不同的请求

但是,我阅读了关于使用附加参数来解析以确定调用了哪个按钮的建议。对于这个解决方案,您不需要使用另一个控制器方法进行间接级别的解析吗?我读到一个控制器调用另一个控制器不是好的MVC实践。在这种情况下,在MVC控制器类中调用另一个方法会是一种糟糕的做法吗

我的表格:

<%= form_tag("users/delegate", :method=>"post") do %>
    <%= label_tag(:user, "Username:") %>
    <%= text_field_tag(:user) %>
    <br/><br/>
    <%= label_tag(:password, "Password:") %>
    <%= password_field_tag(:password) %>
    <br/><br/>
    <%= submit_tag "Login", :name=>'login' %>
    <%= submit_tag "Add User" %>
<% end %>

你应该这样做:

def delegate
  if params[:login]
    login_post(params[:user], params[:password])
  else
    add_post()
  end
end

def login_post(user, password)
  #do your things
end

您是否要传入两个值:params[:user]和params[:password]。如果传入的参数是值,Ruby如何知道hash:password与params[:password]相对应?
hash
password将由您的实现负责。它仍然是
post
。在这里,您只是在控制器中调用一个方法。就是这样。哦,我知道你的更新是怎么回事了。不幸的是,我也有一个规范,它说我无论如何都不能更改login_posts的方法签名来传递params散列而不更改方法参数?类似于它在对该控制器方法的post请求中的工作方式?
def delegate
  if params[:login]
    login_post(params[:user], params[:password])
  else
    add_post()
  end
end

def login_post(user, password)
  #do your things
end