您好我在使用simple_form创建关联时遇到问题。模型章节属于主题:
class Subject < ActiveRecord::Base
validates :name, :presence => true,
:length => {:maximum => 30},
:uniqueness => true
has_many :chapters
end
章节模型:
class Chapter < ActiveRecord::Base
validates :name, :presence => true,
:length => {:maximum => 80}
validates :subject_id, :presence => true
belongs_to :subject
end
章节
的控制器 def new
@chapter = Chapter.new
end
def create
@chapter = Chapter.new(chapter_params)
if @chapter.save
flash[:notice] = "Chapter created successfully."
redirect_to(:action => 'index')
else
render('new')
end
end
private
def chapter_params
params.require(:chapter).permit(:name, :permalink, :subject_id,
:introduction, :free, :active, :position, :semester)
end
新章的表格
<%= simple_form_for(:chapter, :url => {:action => 'create'} ) do |f| %>
<%= f.input :name %>
<%= f.input :permalink} %>
<%= f.association :subject %>
<%= f.input :introduction %>
<%= f.input :free, as: :radio_buttons%>
<%= f.input :active, as: :radio_buttons %>
<%= f.input :position %>
<%= f.input :semester %>
<%= f.button :submit, value: 'Save Chapter' %>
我收到以下错误:
&#34;关联不能用于与对象无关的表单。&#34;
我需要添加到控制器或模型中吗?当我不使用关联并只输入主题的ID时,一切正常。
答案 0 :(得分:2)
您需要在章节模型中添加以下代码
accepts_nested_attributes_for :subject
<强>更新强>
由于主题模型是章模型的父模型,因此前面描述的解决方案将不起作用。 accepts_nested_attributes_for仅适用于“has_many”模型,而不适用于“belongs_to”模型。我将它留在这里作为参考。
为了使表单生成器知道关联的方式,您需要向控制器添加“new”方法以下代码:
@chapter.build_subject
您还需要从:
更改simple_form_for调用simple_form_for(:chapter, :url => {:action => 'create'} ) do |f|
为:
simple_form_for @chapter do |f|
因为你需要将你创建的对象传递给表单,而你在simple_form_for调用中没有使用符号。