Параметры контроллера Rails равны нулю, хотя я вижу их в отладочном выводе - PullRequest
2 голосов
/ 04 февраля 2012

Отказ от ответственности: супер новый для рельсов. Я использую Rails 3.2

В любом случае, я пытаюсь создать форму для входа в систему Merchants. У меня есть MerchantSessionsController, который пытается создать новый сеанс на основе ввода формы входа:

Это то, что у меня есть в моем приложение / просмотров / merchant_sessions / new.html.erb

<%= form_for(:merchant_session, :url => merchant_sessions_path) do |f| %>
  <div class="field">
    <%= f.label :userName %><br />
    <%= f.text_field :userName %>
  </div>
  <div class="field">
    <%= f.label :password %><br />
    <%= f.password_field :password %>
  </div>
  <div class="actions">
    <%= f.submit "Sign in" %>
  </div>
<% end %>

Файл app \ controllers \ merchant_sessions_controller.rb содержит:

def create
    merchant = Merchant.find_by_userName(params[:userName])

    if merchant && merchant.authenticate(params[:password])
        merchant_session[:merchant_id] = merchant.id
        redirect_to root_url, :notice => "Merchanthas been logged in"
    else
        flash.now[:error] = "Invalid username or password."
        @title  = "Merchant Signin"
        render "new"
    end
end

К сожалению, params [: userName] и params [: password] продолжают передаваться как nil, хотя в отладочном выводе на странице входа торговцев я вижу, что userName и пароль определенно передаются.

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: ✓
authenticity_token: 8WsOviJyY1kktPq9dDO+OFePdSKf2uGLY3Pnc4bU2tc=
merchant_session: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  userName: asd
  password: ddsad
commit: Sign in
action: create
controller: merchant_sessions

Я также пытался получить доступ к параметру params [: action], который работал нормально. Почему параметры userName и password равны нулю? Я изменил имя MerchantSessionsController (раньше это просто SessionsController), но я не думаю, что это должно быть проблемой

1 Ответ

4 голосов
/ 04 февраля 2012

Вы ищете неправильное место для имени пользователя и пароля, обратите внимание на конкретную структуру дампа YAML:

merchant_session: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  userName: asd
  password: ddsad

и свою форму:

<%= form_for(:merchant_session, :url => merchant_sessions_path) do |f| %>

Вы хотитесмотреть на params[:merchant_session][:userName] и params[:merchant_session][:password] вместо params[:userName] и params[:password]:

def create
    mparams  = params[:merchant_session]
    merchant = Merchant.find_by_userName(mparams[:userName])

    if merchant && merchant.authenticate(mparams[:password])
        #...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...