【发布时间】:2014-10-03 08:43:21
【问题描述】:
我有一个工作用户表。 我使用以下方法生成了一个新表:
rails generate model quiz_answers
..然后运行 rake db:migrate
我的 CreateQuizAnswers 迁移文件如下所示:
class CreateQuizAnswers < ActiveRecord::Migration
def change
create_table :quiz_answers do |t|
t.references :user, index: true
t.string :answer1
t.string :answer2
t.string :answer3
t.string :answer4
t.string :answer5
t.string :answer6
t.string :answer7
t.string :answer8
t.timestamps
end
end
end
我有一个 quiz_answer 模型:
class QuizAnswer < ActiveRecord::Base
belongs_to :user
end
还有一个 QuizAnswersController:
class QuizAnswersController < ApplicationController
def new
@user = current_user
@quiz_answer = current_user.quiz_answer.build
end
private
def post_params
params.require(:quiz_answer).permit(:body, :user_id)
end
end
我在 routes.rb 中添加了 :quiz_answers 作为资源
已编辑问题:
为什么,那么,当我尝试构建一个表单(使用 Devise)时,我会收到错误“未定义的方法 `body' for...(在此处参考 QuizAnswer)”?我有另一个模型“Post”,它不会产生此错误并且没有“body”属性。
我尝试构建表单的页面是 home/whattypeofleader.html.erb,并且在 routes.rb 中我有:
get "whattypeofleader" => "home#whattypeofleader"
在我的 HomeController 中,我有:
class HomeController < ApplicationController
def index
end
def whattypeofleader
@user = current_user
@quiz_answer = current_user.quiz_answer.build
end
end
我到底做错了什么?任何帮助都非常感谢,谢谢。
哦,如果您需要,这里是表单代码,在 whattypeofleader 中“渲染”的部分代码:
<%= form_for([current_user, @quiz_answer]) do |f| %>
<p>
<%= f.text_area :body, :autofocus => true , :class => "elearning-input"%>
</p>
<p>
<%= f.submit("Save entry") %>
</p>
<% end %>
【问题讨论】:
-
你在用户模型中添加了has_many关联吗?
-
我在 user.rb 中有 has_many :quiz_answers
-
@moosefetcher 那么你想要
current_user.quiz_answers.build- 复数 -
模型应该命名为
QuizAnswer,而不是QuizAnswers -
@moosefetcher 按照惯例,模型名称总是单数
标签: ruby-on-rails model-view-controller devise