BELONGS_TO私は単純な関係を持っているにhas_one /アプローチ
<%= f.simple_fields_for :locker do |l| %>
<%= l.input :id, as: :select,
collection: @lockers_collection,
label: false,
value_method: :id,
label_method: :number,
include_blank: true,
input_html: { class: "admin-select2" },
selected: "#{@student.locker ? @student.locker.id : ""}",
wrapper: 'admin_vertical_select' -%>
<% end -%>
私は新しい学生が、私は(またはしない)ロッカーを割り当てることができます作成しています、すべてがシンプルであり、期待通りに機能します。編集/更新アクションがあると、私は大きな問題を持っているもの、とにかく
def locker_attributes=(attributes)
if attributes['id'].present?
self.locker = Locker.find(attributes['id'])
end
super
end
:まあ、私はそうRailsはレコード(SO上でここに見つける液)を見つけることではない不満た、学生モデルにこのハックを追加する必要がありました。 まず、私は学生は現在、新しいものを構築したり、既存のためのロッカーかを持っているかどうかを確認する必要があります。今すぐ
if @student.locker
@student.build_locker(id: @student.locker.id)
else
@student.build_locker
end
私は解決策を見つけようとしています実際の問題を。 基本的に起こるシナリオはわずかです:
- 学生はロッカーを持っておらず、ロッカーを持っていません。
学生にはロッカーがありますが、私は(私は疑う)ロッカーが空であるので、それはこの2つのシナリオの学生で
が更新されないクリアしたいです。これに対処する方法は?
また、ロッカーを切り替える可能性もあります。 この場合、私は何とかRailsが "古い"ロッカーを更新するほどスマートになると思っていました。古いロッカーのstudent_id IDがnilであることがわかりますが、Railsはどうしていますか?問題は私がロッカーにpaper_trailを持っていて、古いものが空になったらバージョン管理する必要があることです。
空のシナリオをどのように扱いますか?これが私の最大の問題です。 私はそれを正しくやっているのですか、それを行う良い方法がありますか?
Thxを
ちょっとマリオ:あなたはこのようないくつかのコントローラ内のアクションに以下を追加することができロッカーを無効にする
。私は実際にinverse_ofを定義していますが、それを言い忘れました。私は私の質問を更新します。とにかく、それはその方法なしでは動作しません。 –
質問を更新しました –
私はロッカーを無効にして保存することはできません。生徒の他の属性が変更されたらどうなりますか?住所などのような... –