【发布时间】:2015-06-10 21:38:13
【问题描述】:
我有两个模型,一个如下
class Course < ActiveRecord::Base
has_many :assignments, class_name: 'Assignment', foreign_key: :assignment_id, dependent: :destroy
has_many :groups, class_name: 'Group', foreign_key: :group_id, dependent: :destroy
end
还有另一个模型
class Assignment < ActiveRecord::Base
belongs_to :course, class_name: 'Course', foreign_key: :course_id
has_many :questions, class_name: 'Question', foreign_key: :question_id, dependent: :destroy
end
这两者具有一对多的关系,即一门课程可以有许多作业,但作业属于一门课程。
在我的assignment/index.html.erb 视图中,我有以下表单
<%= form_tag({controller: "assignments", action: "new"}, method: "get", class: "nifty_form") do %>
<%= select_tag "course", options_from_collection_for_select(Course.all, :id, :name) %> <br /><br />
<%= submit_tag("New Assignment") %>
<% end %>
我的 assignments_controller.rb 的新方法
def new
@course = Course.find(params[:course])
@assignment = @course.assignments.build
end
当我提交上述表格时,我在这一行出现错误@assignment = @course.assignments.build
ActiveRecord::UnknownAttributeError in AssignmentsController#new
unknown attribute: assignment_id
assignment_id 和 course_id 不是任何表中的列。如何解决此错误?
我也是 Rails 新手。由于我有一对多的关系,我正在尝试将数据库创建为 @assignment = @course.assignments.build 这是正确的方法吗?我的意思是我必须写@course.assignments.build 还是只写@assignment = Assignment.new 可以吗?另外我用外键写关系的方式是否正确?
【问题讨论】:
-
因为没有必要在课程模型中添加foreign_key::assignment_id。当您定义 has_many 关系时,它会自动被理解。请确保您的课程表有 assignment_id 作为列。如果可能,请写下所需的迁移。
标签: ruby-on-rails ruby ruby-on-rails-3 activerecord