ruby-on-rails - 如何从 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
解决方案
您的 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
推荐阅读
- .net - .NET 通过 TLS 1.2 删除客户端证书
- openvpn - OpenVPN 服务器名称更改破坏了我的网络服务器
- c++ - QML QTQuick ChartView 将指针传递给 C++
- windows - Windows 脚本宿主 Javascript 获取 .js 文件的路径
- c - 查找为网络打开套接字的线程 id
- google-cloud-firestore - Firestore 中的每个集合的读/写监控
- python - PermissionError: [WinError 5] 访问被拒绝
- c# - 将复合类型从 postgresql 映射到 ef core
- go - 漂亮打印与字符串转换的实用方法
- r - 调整后新买卖的价格加权平均值