2013-02-15 49 views
0

我试图让2个按钮在同一个窗体的轨道中工作。我有一个登录表单,包含一个添加用户和注册按钮。我有2个方法在我的控制器中已经处理了这2个不同的请求。在轨道中的两个按钮

但是,我阅读了有关使用附加参数解析以确定哪个按钮被调用的建议。对于这种解决方案,您不需要使用另一个控制器方法进行解析的间接级别?我看到有一个控制器调用另一个控制器不是很好的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() 
    else 
     add_post() 
    end 
    end 

def login_post 
    user = params[:user] 
    password = params[:password] 
    errCode = UserModel.login(user,password) 
    if (errCode>0) 
     count = errCode 
     errCode = 1 
    end 
    final_obj = {:errCode=> errCode, :count=>count} 
    respond_to do |format| 
     format.json { render :json=>final_obj, :status=>200} 
    end 
    end 

回答

0

你应该这样做:

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

难道你路过的2个值:PARAMS [:用户],而params [:密码]。如果传入的参数是一个值,Ruby如何知道hash:password对应于params [:password]? – Andy 2013-02-15 18:54:21

+0

'哈希'密码将由您的实施照顾。它仍然是'后'。这里你只是在你的控制器中调用一个方法。而已。 – codeit 2013-02-15 19:05:42

+0

哦,我看你的更新是如何工作的。不幸的是,我也有一个规范说我不能更改login_post的方法签名 – Andy 2013-02-15 19:05:58