0

こんにちは、Rails on Rest 2 - movielist tutorial with rails 4 を使用しようとしていますが、新しいレールに合わせて調整を行っています。映画の役割の関連付けに固執しています。Movie.rbに追加しました

class Movie < ActiveRecord::Base

    has_many :roles, :dependent => :destroy
  has_many :people, :through => :roles
validates_presence_of :title
  def new_role=(values)
    values.each do |i, hash|
      unless hash[:name].blank?
        roles.create(:person_id => hash[:person_id], :name => hash[:name])
        roles.save
      end
    end
  end

 def deleted_roles=(values)
   values.each do |role_id|
      roles.find(role_id).destroy
    end
  end

end

また、私がレンダリングした _Form.html.rb を表示する (以下の抜粋)

 <b>Add New People</b><br />
    <% (1..3).each do |i| %>
      <%= select_tag 'movie_new_role_person_id', options_for_select(@people), {
        :name => "movie[new_role][#{i}][person_id]"
      } %>
      <%= text_field_tag 'movie_new_role_name', '', {
        :name => "movie[new_role][#{i}][name]"
      } %><br />
    <% end %>
  </p>

  <p>
    <%= f.submit "Update" %>
  </p>

選択するリストをレンダリングしますが、送信すると、データベーステーブルには何も書き込まれません。データベースに手動でデータを入力すると、映画リスト ページに表示されます。たとえば、「スティーブン スピルバーグ - 監督」などです。

パラメータ駆動の制限かもしれないと思いましたが、関連スタイルのパラメータフィルタの良い例がありません

ありがとう

アラン

4

1 に答える 1

0

Chicagogrrl の !flag を含めてデバッグした後、movies_Controller の params.permits を再度調査し、例外のリストにメソッド タイプを追加する必要があると考えました。この構文に関する詳細な情報は見つかりませんでしたが、試行錯誤が功を奏しました。

  app/controllers/movies_controllers.rb (excerpt)
 ......
     # Never trust parameters from the scary internet, only allow the white list through.
      def movie_params
       params.require(:movie).permit(:title,:description, :rating, :role, :deleted_roles=>[], 
        :new_role=> ['person_id', 'name'])
     end

……

delete_roles=>[] は配列パラメーターを受け取り、movies.rb の delete_roles メソッドを処理します。 new_role=>['person_id', 'name'] は、new_role の個々のパラメーターを受け取ります。

これで誰かの時間を節約できることを願っています。誰かがこれ以上情報を必要とする場合は、もう一度感謝してください

于 2013-08-16T09:22:24.747 に答える