我是铁杆新手。我有一个Devise用户模型。我试图从用户获取输入并将其与字符串进行比较并重定向到另一个页面(如果相同)。但@user存在一些问题。这将是一个简单的问题,但我被困了几个小时。请帮忙。
questions_controller
class QuestionsController < ApplicationController
def qn1
@user = User.find_by_email(params[:email])
end
def submit
@user = User.find_by_email(params[:user])
if @user.answer == 'blank'
render root_path
else
render 'qn1'
end
end
end
qn1.html.erb
<%= form_for(@user, :url => {:controller => "questions", :action => "submit"}) do |f| %>
<%= f.label :answer %>
<%= f.text_field :answer %>
<br>
<%= f.submit "Submit", class: "btn btn-large btn-primary" %>
<% end %>
答案 0 :(得分:1)
您应该使用它的多维数组检索form_for
发送的参数,如下所示:
params[:user][:attribute]
您告诉我们您安装并运行了Devise。如果您已登录,则访问当前用户的最简单,最安全的方法是使用以下方法(通过登录时自动提供)
current_user
所以,如果你想比较当前用户发送的答案,你可以这样做:
# QuestionsController
def submit
if current_user.answer == params[:user][:answer]
redirect_to root_path
else
render 'qn1'
end
end
或者,如果只是比较用一些任意字符串发送的答案,你甚至不需要用户模型:
# QuestionsController
def submit
if params[:user][:answer] == 'blank'
redirect_to root_path
else
render 'qn1'
end
end
您不应该检索用户或实例化新用户,只是设置它对表单发送的答案,并将其与字符串进行比较。这绝对没必要。