2012-05-16 100 views
0

我發現了很多關於這個Railscast的帖子,但所有的建議都沒有幫助我。 我已經能夠在視圖中呈現一個嵌套的表單域,但只有一個,而不是我在控制器中調用的3個域。當我提出,我得到的錯誤:無法大規模指派保護的屬性:線索Rails 3 railscast#196,3次循環不工作

Chapter.rb

class Chapter < ActiveRecord::Base 
belongs_to :trail 
has_many :clues, :dependent => :destroy 
accepts_nested_attributes_for :clues 
attr_accessible :asset, :assetkind, :description, :gate, :name, :trail, :trail_id, :cover 
. 
. 
. 

end 

Clue.rb

class Clue < ActiveRecord::Base 
attr_accessible :chapter_id, :theclue, :typeof, :chapter 
. 
. 
. 
belongs_to :chapter 
end 

在它說,使用railcast相當於:線索,並且這呈現3個字段。但在我的情況下,它並沒有渲染田野。相反,我使用@ chapter.clues,它只呈現一個。

我在創建新章節時的表格。

<h1>Add a New Chapter</h1> 
<h3>Add To Trail : <%= @trail.title %></h3><br> 
<%= form_for [@trail, @trail.chapters.build] do |f| %> 

<h6>About the Chapter</h6> 
    <%= f.label :name, 'Chapter Name' %> 
    . 
    . 
    . 
<h6>Progressing the Story</h6> 
    <%= f.fields_for @chapter.clues do |builder| %> 
    <p> 
     <%= builder.label :theclue, "Enter Clue" %> 
     <%= builder.text_area :theclue, :rows => 2 %> 
    </p> 
<% end %> 
    . 
    . 
    . 
<% end %> 

我chapters_controller.rb新

class ChaptersController < ApplicationController 

def new 
    @trail = Trail.find(params[:trail_id]) 
    @chapter = Chapter.new 
    @title = "Chapter" 
    3.times { @chapter.clues.build } 
    logger.debug "CHAPTER!!!!!!!!!!!!new: am i in a trail? #{@trail.to_yaml}" 
    logger.debug "CHAPTER!!!!!!!!!!!!new: am i in a clue? #{@chapter.clues.to_yaml}" 
end 

我的日誌顯示我3條線索,但屬性是空的(無:ID)。這是一個錯誤的跡象?所以即使我的日誌顯示3個線索對象,我的視圖也只顯示一個。

想法?我已經,由於對計算器的建議,加入到chapter.rb

attr_accessible :clues_attributes 

,並沒有運氣,同樣的行爲和錯誤並且沒有。

預先感謝您的時間

回答

1

我想出了自己。我不確定爲什麼,我會推測,如果我離開,歡迎有人更好地解釋它。

的問題在這裏:

<%= form_for [@trail, @trail.chapters.build] do |f| %> 

我改成:

<%= form_for @chapter do |f| %> 

,然後我不得不改變周圍的一些事情在我chapters_controller使小徑對象和捕捉的ID。但是,在我做出這個改變之後,我的3個線索領域開始出現在視圖中,並且我的關於批量分配的錯誤消失了。

我認爲我之前創建的章節是空的,並且沒有真正生成,只保存信息,因此試圖用線索form_for保存嵌套信息是臨時數據的又一步驟...在控制器中創建對象的位置以及然後填寫表單更加實質....我知道真正的技術...就像我說的,我知道它的工作原理,不要問我怎麼......但我開始明白Rails是怎麼想的。

0

When I submit, I get the error: Can't mass-assign protected attributes: clue

這是告訴你的屬性是從質量分配的保護。基本上,你能夠設置它的唯一方法是通過代碼中的方法,而不是來自用戶輸入。 (它通常通過模型上的update_attributes分配)。

您需要做的是將模型/ chapter.rb中的attr_accessible添加到線索中。

您可能需要添加:線索 - 我認爲它實際上應該給你錯誤:線索被保護。您可能遇到以下問題:clue_ids。無論它說什麼都受到保護,只需在該模型中添加attr_accessible方法,並且您應該能夠從用戶輸入中更新它。

+1

感謝您的回覆。我試圖添加:線索和:clues_attributes到atrr_accessible這一章,我得到了同樣的錯誤:無法批量分配受保護的屬性:線索....當我使用:線索我得到的錯誤:未知屬性:線索...... ? – HappaGirl