0

この Railscast に関する多くの投稿を見つけましたが、すべての提案が役に立ちませんでした。ビューでネストされたフォーム フィールドをレンダリングできましたが、コントローラーで呼び出した 3 つではなく、1 つだけです。送信すると、次のエラーが表示されます: 保護された属性を一括割り当てできません: 手がかり

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

手がかり.rb

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

railcast では、:clues に相当するものを使用するように指示されており、これにより 3 つのフィールドがレンダリングされます。しかし、私の場合、フィールドはレンダリングされませんでした。代わりに @chapter.clues を使用すると、1 つだけがレンダリングされます。

新しい章を作るときの私のフォーム。

<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 つの手がかりが表示されますが、属性は空です (no :id)。これは何か問題がある兆候ですか?したがって、ログには 3 つの手がかりオブジェクトが表示されますが、ビューには 1 つしか表示されません。

考え?私はすでに、stackoverflow に関する提案のおかげで、chapter.rb に追加しました。

attr_accessible :clues_attributes 

運がなく、同じ動作とエラーがありました。

お時間をいただきありがとうございます

4

2 に答える 2

1

私は自分でそれを理解しました。正確な理由はわかりませんが、推測しますが、私がオフになっている場合は、誰かがそれをよりよく説明してくれることを歓迎します.

問題はここにありました:

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

私が変更したもの:

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

そして、charpters_controller のいくつかを変更して、トレイル オブジェクトを作成し、ID を取得する必要がありました。しかし、この変更を行った後、3 つの手がかりフィールドがビューに表示されるようになり、一括割り当てに関するエラーがなくなりました。

前に作成した章は空で、実際には生成されておらず、情報を保持しているだけだったと思います。そのため、form_for の手がかりを使用してネストされた情報を保持しようとすることは、一時データの別のステップでした...コントローラーでオブジェクトを作成してから、フォームはより充実していました....私は本当に技術的なことを知っています...私が言ったように、私はそれを機能させました.どのように私に聞かないでください.

于 2012-05-16T18:26:41.193 に答える
0

送信すると、次のエラーが表示されます: 保護された属性を一括割り当てできません: 手がかり

これは、属性が一括割り当てから保護されていることを示しています。基本的に、それを設定できる唯一の方法は、ユーザー入力ではなく、コード内のメソッドを使用することです。(通常、モデルの update_attributes を介して割り当てられます。)

必要なことは、models/chapter.rb の attr_accessible に :clue を追加することです。

:clues も追加することをお勧めします。実際には、:clues が保護されているというエラーが表示されるはずです。:clue_ids で問題が発生する場合があります。それが言うことは何でも保護されています。そのモデルにattr_accessibleメソッドを入れるだけで、ユーザー入力から更新できるはずです。

于 2012-05-16T14:28:10.513 に答える