0

我跟隨railscast 196.我有兩個級別的關聯。應用程序 - >表單 - >問題。這是表單控制器中的新操作。Rails 3 - 構建不保存到數據庫(Railscast 196)

def new 
@app = App.find(params[:app_id]) 
@form = Form.new 
3.times {@form.questions.build } 
end 

視圖中顯示所有3個問題很好,我可以提交表單...但沒有被插入到數據庫中的問題。這是我創造的動作

def create 
@app = App.find(params[:app_id]) 
@form = @app.forms.create(params[:form]) 

respond_to do |format| 
    if @form.save 
    format.html { redirect_to(:show => session[:current_app], :notice => 'Form was successfully created.') } 
    format.xml { render :xml => @form, :status => :created, :location => @form } 
    else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @form.errors, :status => :unprocessable_entity } 
    end 
end 
end 

這裏是發送到我的創建方法PARAMS:

{"commit"=>"Create Form", 
    "authenticity_token"=>"Zue27vqDL8KuNutzdEKfza3pBz6VyyKqvso19dgi3Iw=", 
    "utf8"=>"âœ「", 
    "app_id"=>"3", 
    "form"=>{"questions_attributes"=>{"0"=>{"content"=>"question 1 text"}, 
    "1"=>{"content"=>"question 2 text"}, 
    "2"=>{"content"=>"question 3 text"}}, 
    "title"=>"title of form"}}` 

這表明PARAMS都被正確發送......我想。問題模型只有一個「內容」文本列。

任何幫助表示讚賞:)

回答

0

好了它。原來,我應該一直在看我的控制檯。當試圖將問題插入數據庫時​​,掛起的錯誤是「警告:無法批量分配受保護的屬性:questions_attributes」。將這添加到可訪問的屬性中就有訣竅。

class Form < ActiveRecord::Base 
    belongs_to :app 
    has_many :questions, :dependent => :destroy 
    accepts_nested_attributes_for :questions 
    attr_accessible :title, :questions_attributes 
end 
0

假設:

  1. 你有你的形式設置不當,
  2. 你的服務器顯示的數據被髮送到新的動作,並
  3. 你模型不包含阻止保存的回調,

嘗試更改:

@form = @app.forms.create(params[:form]) 

@form = @app.forms.build(params[:form]) 
+0

雖然這適用於將外鍵正確設置到app_id窗體表格中,但問題仍然未保存。 – Msencenb 2011-06-05 21:05:07