Rails形成simple_form的关联

时间:2014-11-14 11:18:18

标签: ruby-on-rails rails-activerecord simple-form

您好我在使用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时,一切正常。

1 个答案:

答案 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调用中没有使用符号。