プロジェクトの作成と更新を許可する CRUD を作成する必要があり、属性の 1 つはプロジェクトを所有するクライアントです。プロジェクトが作成または編集されると、select タグを使用してクライアントが選択されます。
私はこのモデルを持っています:
class Cliente < ActiveRecord::Base
attr_accessible :nombre
has_many :proyectos
end
class Proyecto < ActiveRecord::Base
attr_accessible :nombre, :cliente_id
belongs_to :cliente
end
このコントローラー:
class ProyectosController < ApplicationController
def new
@proyecto = Proyecto.new
@clientes = Cliente.order(:nombre)
end
def edit
@proyecto = Proyecto.find(params[:id])
@clientes = Cliente.order(:nombre)
end
def create
@proyecto = Proyecto.new(params[:proyecto])
if @proyecto.save
redirect_to @proyecto, notice: 'Proyecto was successfully created.'
else
render action: "new"
end
end
end
def update
@proyecto = Proyecto.find(params[:id])
if @proyecto.update_attributes(params[:proyecto])
redirect_to @proyecto, notice: 'Proyecto was successfully updated.'
else
render action: "edit"
end
end
end
ビューのこのフォーム(haml):
= form_for @proyecto do |f|
= f.label :cliente
= f.collection_select :cliente_id, @clientes, :id, :nombre
= f.label :nombre
= f.text_field :nombre
= f.submit 'Save'
コードは scaffold で生成されました。不要な部分を削除して、select を作成するコードを追加しただけです。
最初に、モデル Proyecto で私はこれを持っていました:
attr_accessible :nombre
しかし、「保護された属性を一括割り当てできません: cliente_id」というエラーが表示されます。同様の問題をstackoverflowで検索すると、cliente_idをattr_accessibleに追加する必要があることがわかりましたが、Googleで検索すると、セキュリティ上の問題によりattr_accessibleにフォアイングキーを追加してはならないことがわかりました。これは矛盾しています。
これは、cliente_id を attr_accessible に追加して、作成および更新メソッドをコーディングする正しい方法ですか? そうでない場合、正しい方法は何ですか?
私はレール3.2.8とルビー1.9.3p194で作業しています