2013-02-15 45 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