私はPeepCodeの (現在は少し古い) Meet Rails 3チュートリアルに従っていますが、チュートリアルのいくつかの提案を Rails 3.2 と連携させるのに苦労しています。
チュートリアルでは、以下Role
に属するモデルを作成しProject
ます。
class Role < ActiveRecord::Base
belongs_to :project
validates :project_id, :presence => true
attr_protected :project_id
end
routes.rbファイルは、 のコンテキストで を操作Role
する必要があるように、リソースをネストします。Role
Project
resources :projects do
resources :roles
end
上記のモデル コードでは、プロジェクトのコンテキストでevery を作成することで「より安全に」設定できるため、フィールドattr_protected
を保護するために使用するようにチュートリアルでアドバイスされていることに注意してください。:project_id
Role
class RolesController < ApplicationController
⋮
def create
@role = project.roles.new(params[:role])
⋮
問題は、 FormtasticRole
で作成された を作成するための HTML フォームに、プロジェクトを選択するためのフィールドが含まれていることです。したがって、フォームからのパラメーターを使用して新しいオブジェクトを設定しようとすると、質量割り当てを使用して設定しようとし、次のように失敗します。project_id
project.roles.new(params[:role])
Role
project_id
ActiveModel::MassAssignmentSecurity::RolesController#create のエラー
保護された属性を一括割り当てできません: project_id
これを実装するために受け入れられている方法は何ですか? 属性を保護するproject_id
ことは悪い考えでしたか? または、を含めずに新しいRole
フォームデータを入力する方法はありproject_id
ますか?