私は現在、ビークルを構築するフォームを持っています。あなたは何make_id
かmodel_id
列が存在しないことに注意しますフォームを送信するときにフィールドを無視する
class Vehicle < ActiveRecord::Base
attr_accessible :trim_id
belongs_to :trim
end
;:車両モデルは、当初のようになります。トリムはモデルに属し、モデルはメイクに属しているため、これらは必要ではないため、車両モデルに格納する必要はありません。
車両のフォームに問題が発生します - リンクされた選択肢がいくつかあります。ここでメイクを選択し、次にモデルを選択し、トリムを選択します。私は新しい車を作成していた場合、次のコードは正常に動作します:
<%= select("", "", Make.all.collect {|p| [ p.value, p.id ] }, {:prompt => 'Select Make'}, {} %>
<%= f.select("", "", options_for_select([]), {:prompt => 'Select Model'}, {} %>
<%= f.select(:trim_id, options_for_select([]), {:prompt => 'Select Trim'} %>
あなたが注意するように、製造元とモデルを選択するには、フォームパラメータを持っていないので、無視されます。これは正常に動作し、車両は正しく保存されます。
この車両を編集したいときに問題が発生します。メイクとモデルダミーはトリムに連鎖することを選択するため、最初は編集中の車両の製造元とモデルではなく、デフォルト値に設定されます。その結果、私が見えるように、私のモデルを更新しました:
class Vehicle < ActiveRecord::Base
attr_accessible :trim_id
belongs_to :trim
has_one :model, :through => :trim
has_one :make, :through => :model
end
とにフォームを更新:期待されるよう
<%= f.select(:make, Make.all.collect {|p| [ p.value, p.id ] }, {:prompt => 'Select Make'}, {} %>
<%= f.select(:model, options_for_select([]), {:prompt => 'Select Model'}, {} %>
<%= f.select(:trim_id, options_for_select([]), {:prompt => 'Select Trim'} %>
しかし、製造元とモデルではないため、これは、Can't mass-assign protected attributes: make, model
になりattr_accessible(とにかくmakeとmodelの列は存在しません)。
私の質問は、新しい車両フォームを送信する際にこれらのフィールドを無視する方法ですが、車両の編集中でも正しい値を選択させる方法はありますか?
ありがとうございます!
EDIT:次のようにBeerlingtonからの回答ごとに、私は私のcreate
アクションを更新しました:
def create
@sale = Sale.new
current_ability.attributes_for(:new, Sale).each do |key, value|
@sale.send("#{key}=", value)
end
@sale.update_attributes(params[:sale].except("date"))
authorize! :create, @sale
if @sale.save
redirect_to @sale, :notice => "Successfully created sale."
else
render :action => 'new'
end
end
あなたが、私はここに「日付を」以外のしようとしていますので注意します(も試してみました:日付) - このネストされていない属性でテストすることでした。
しかし、日付がまだ提出されていることを確認しています。誰かがHash#を使用してコントローラの完全な操作を支援することはできますか?
EDIT 2:それは元の質問に答えとして私は、正しいようBeerlingtonの答えをマークしている - 私はここで、フォローアップの質問求めている:あなたはHash#exceptを使って、必要とされていないキーを削除することができますExcluding nested form fields in controller action with Hash#exclude before mass_assignment error is generated?
ありがとうございます、それはうまくいくようです - ネストされた属性を除外する方法を更新することができますか?
vehicles_attributes"=>{"0"=>{"make"=>""}
に入りますか?ありがとう! –これは元の質問に答え、私を正しい軌道に乗せるため、答えとしてマークされています。 –