首页 > 解决方案 > 如何从 post 表单中获取值并在 rails 控制器中使用它们

问题描述

我的控制器需要使用表单中的值来获取用户并启动会话。

似乎没有发布值,会话从未启动,else 语句似乎总是被执行,而不是 if 需要执行。

控制器

def new
    end

def create
    uid = params[:uid]
    role = params[:role]

    user=User.find_by(userid:uid,role:role)
    if user 

        session[ :user_id]=user.id
        redirect_to controller: 'stuff', action: 'index'
    else
        render 'new', alert:
          "err"
        end
end 

new.html.erb 查看

<h1 class ="card-header"> Log IN </h1>

            <%= form_for :session, url: sessions_path do |f| %>
            <div class="form-group">
                <%= f.label :uid %>
                <%= f.text_field :uid %>
            </div>

            <div class="form-group">
                <%= f.label :role %>
                <%= f.text_field :password %>
            </div>



            <div class="form-group">
                <%= submit_tag 'Log In' %>                
            </div>
            <% end %>
        </div>

路线

resources :sessions

标签: ruby-on-rails

解决方案


您的 uid 和角色参数将在一个名为 session 的符号中可用

所以参数看起来像这样


params: {
# other  symbols
  session: {
     uid: // your uid,
     role: // your role
  }
}

所以当你像这样访问 uid 和角色时

uid = params[:uid]
role = params[:role]

它将为零,因为它们存储在会话的符号中。

所以访问它们的正确方法是这样的

def create
    uid = params[:session][:uid]
    role = params[:session][:role]

    user=User.find_by(userid:uid,role:role)
    if user 

        session[ :user_id]=user.id
        redirect_to controller: 'stuff', action: 'index'
    else
        render 'new', alert:
          "err"
        end
end 


推荐阅读