2012-05-16 2 views
0

이 Railscast에 대한 많은 게시물을 발견했지만 모든 제안이 도움이되지 못했습니다. 중첩 된 양식 필드를 뷰에서 렌더링 할 수 있었지만 컨트롤러에서 호출 한 3 개가 아닌 하나만 렌더링했습니다. 내가 제출하면, 나는 오류 : 수 없습니다 대량 할당 보호 특성 : 단서Rails 3 railcast # 196, 3x loop not working

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가 사용 말한다 railcast에서

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

이것과 동등 : 단서, 그리고이 3 개의 필드를 렌더링합니다. 그러나 내 것은 필드를 렌더링하지 않았습니다. 대신 @ chapter.clues를 사용하고 하나만 렌더링합니다.

새 장을 만들 때 제 양식. (: ID 번호)

<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 단서를 보여 주지만, 속성은 빈 없습니다. 이것은 잘못된 신호인가? 그래서 내 로그에 3 단서 개체가 표시 되더라도 내보기에는 하나만 표시됩니다.

생각하십니까? 나는 이미, 유래에 대한 제안 덕분에,

attr_accessible :clues_attributes 

을 chapter.rb 추가와 함께 그없이 운, 같은 동작 오류가 없었습니다. 시간

답변

1

나는 그것을 스스로 알아 냈다. 확실하지 않은 이유는 정확히 추측 할 것입니다. 나는 산책로 개체를 확인하고 ID를 캡처하는 내 chapters_controller 주위 몇 가지를 변경했다 다음

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

과 :

문제는 여기에 있었다 :

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

는 I로 변경한다. 그러나이 변경을 한 후에, 나의 3 단서 필드가보기에 나타나기 시작했고 대량 할당에 관한 나의 오류가 사라졌습니다.

이전에 만든 장이 비어 있고 실제로 생성되지는 않았으므로 정보 만 가지고 있으므로 단서가있는 중첩 된 정보를 유지하려고 시도하는 것은 임시 데이터의 또 다른 단계였습니다 ... 내 컨트롤러 및 양식을 채우는 것이 더 충실했습니다 .... 나는 정말로 기술적 인 것을 알고 있습니다 ... 내가 말했듯이, 나는 그것을 작동 시켰고, 어떻게 묻지는 않았지만, 레일스가 어떻게 생각하는지 이해하기 시작했습니다.

0

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

이 사전에

덕분에 속성이 대량 할당으로부터 보호되고 있음을 말하고있다. 기본적으로, 코드를 설정할 수있는 유일한 방법은 사용자 입력이 아닌 코드의 메서드를 사용하는 것입니다. (보통 모델의 update_attributes를 통해 할당됩니다.)

models/chapter.rb에서 attr_accessible에 실마리를 추가하면됩니다.

실마리를 추가 할 수도 있습니다. 실제로 실마리를 제공해야한다고 생각합니다 : 실마리가 보호됩니다. clue_ids를 사용하여 문제가 발생할 수 있습니다. 그것이 말한 것이 무엇이든간에, 그 모델의 attr_accessible 메소드를 넣으면 사용자 입력으로부터 그것을 업데이트 할 수 있어야합니다.

+1

답변 해 주셔서 감사합니다. 나는 단서를 추가하려고 : clues_attributes 장 atrr_accessible 및 동일한 오류 있어요 : 보호 된 특성을 할당 할 수 없습니다 ... 단서 ... .... 사용할 때 : 단서 오류 : 알 수없는 특성 : 단서 ... 얻을 ? – HappaGirl