2013-02-15 3 views
0

Я пытаюсь получить две кнопки для работы в рельсах для той же формы. У меня есть форма входа в систему как с кнопкой добавления пользователя, так и с кнопкой регистрации. У меня есть два метода в моем контроллере, которые уже обрабатывают эти два разных запроса.Две кнопки в рельсах

Однако я прочитал предложения об использовании дополнительного параметра для синтаксического анализа, чтобы определить, какая кнопка была вызвана. Для этого решения вам не нужен уровень косвенности с другим методом контроллера для синтаксического анализа? Я прочитал, что с вызовом контроллера другого контроллера не очень хорошая практика 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 %> 

Кроме того, как я прохожу в аргументах из запроса пост в другой метод? I по существу делал, но аргументы не передаются. Нужно ли передавать параметры в другой метод? Это глобальная переменная?

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 знает, что хэш: пароль соответствует параметрам [: password], если передаваемый аргумент является значением? – Andy

+0

'hash' пароль будет позаботиться о вашей реализации. Это будет по-прежнему 'post'. Здесь вы просто вызываете метод в своем контроллере. Вот и все. – codeit

+0

ohh Я вижу, как работает ваше обновление. к сожалению, у меня также есть спецификация, которая говорит, что я не могу изменить сигнатуру метода для login_post – Andy

Смежные вопросы