更新:似乎错误可能是由于设计冲突造成的。我使用了另一个应用程序中的一些内容,这些内容显然使得设计变得坚果而且无法读取用户会话。我将从一个干净的安装开始,看看我是否有更好的运气。谢谢!
我正在创建一个只有一个问题的页面。在那个页面上,我有一个人们可以回答这个问题的表格。表单本身只有一个答案块和一个提交按钮。但是,我想将它与提交表单的用户和答案所链接的问题联系起来。为了安全起见,我想在控制器中执行此操作,而不是视图。答案表格显示在问题#index页面上。我目前收到以下错误:
undefined method `user' for #<AnswersController:0x007fe618e5cc10>
我怀疑如果它超过了用户,我会得到同样的问题&#39;
问题#index看起来像这样:
<div class="home_question">
<h1><%= @daily.question %></h1>
<div class="answer_form">
<%= form_for @answer do |answer| %>
<%= answer.label :answer, "What do you think?" %>
<%= answer.text_area :answer %>
<%= answer.button %>
<% end %>
</div>
</div>
问题控制器如下所示:
def index
@daily = Question.find_by(show_month: Time.now.month, show_day: Time.now.day)
@answer = Answer.new
end
答案控制器如下所示:
def index
@answers = Answer.all
@answer = Answer.new
end
def new
@answer = Answer.new
end
def create
@answer = Answer.new(answer_params)
@user = user(params[:id])
@question = question(params[:id])
if @answer.save
redirect_to root
else
render 'new'
end
end
private
def answer_params
params.require(:answer).permit(:answer, :users_id, :questions_id)
end
表单当前传递的数据是:
{"utf8"=>"✓",
"authenticity_token"=>"mA16+dg7+Edzxvu/FVWR5r8PZ9zdNaOyvOwSz1VpOXU=",
"answer"=>{"answer"=>"test"},
"button"=>""}
答案 0 :(得分:2)
您得到的错误是因为在控制器中您正在使用未定义的user
变量。您想使用大写模型名称User
。
获取用户ID
如果这是登录用户,那么您可以通过查看会话来获取其ID。通常Rails应用程序将有一个这样的帮助器:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
如果你正在使用设计,你不需要这个助手 - 它已经为你完成了。
获取问题ID
首先确保您的关联资源是嵌套的。所以在我们的routes.rb
文件中:
resources :questions do
resources :answers
end
这意味着要创建答案,我们需要POST /questions/:id/answers
。
表单更改为:
<%= form_for [@daily, @answer] do |answer| %>
<%= answer.label :answer, "What do you think?" %>
<%= answer.text_area :answer %>
<%= answer.button %>
<% end %>
并在控制器中:
def create
@answer = Answer.new(answer_params)
@answer.user = current_user
@answer.question = Question.find(params[:id])
if @answer.save
redirect_to root
else
render 'new'
end
end