2014-11-14 63 views
0

嗨我在使用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 

表格新章

我得到以下錯誤:

「關聯不能用於與對象無關的表單中。」

有什麼我需要添加到我的控制器或模型?當我不使用關聯和簡單地輸入主題的ID時,一切正常。

回答

2

您需要添加到模型章下面的代碼

accepts_nested_attributes_for :subject 

更新

由於主題模型是章模型的父,之前描述的解決方案將無法工作。 accep_nested_attributes_for僅適用於「has_many」模型而不適用於「belongs_to」模型。我將把它留在這裏作爲參考。

爲了使表單生成器知道怎麼樣的關聯,你需要添加到您的控制器的「新」方法如下代碼:

@chapter.build_subject 

您還需要將simple_form_for呼叫從更改:

simple_form_for(:chapter, :url => {:action => 'create'}) do |f| 

到:

simple_form_for @chapter do |f| 

因爲你需要傳遞的對象,你ç reate到你的表單,而你在simple_form_for調用中沒有使用符號。

+0

儘管向控制器添加構建方法是有道理的,但仍然無法正常工作。 – Hacktacus

+1

將simple_form_for調用從:chapter更改爲simple_form_for @chapter do | f | – nunopolonia