私は Rails に非常に慣れていないため、AJAX、UJS、および Rails を一緒に扱うときに多くの混乱が生じています。私はrailscastを見て、いくつかのSOの回答を見て、freenodeで#rubyonrails IRCチャネルを試しました。悲しいかな、私はまだ立ち往生しています。
とにかく、ここに私の問題があります。
SO私は建物と財産の2つのモデルを持っています。建物に属しているプロパティと、建物には多くのプロパティがあります。
プロパティに building_id として外部キーを追加しました。
現在、私の建物モデルには Method: self.search(search) があり、正しいアドレス (例: 999 Decarie) を指定すると、データベース内の Building テーブルから building_id が正しく返されます。
def self.search(search)
#search.instance_variables.map {|v| "#{v}: #{search.instance_variable_get(v)}\n"}.join
if ((search.nil?) || (search == ""))
nil
else
search = search.to_s
d { search }
split = search.split(' ', 2)
stnum = split.first
d { stnum }
stname = split.last
d { stname }
Building.where("streetno = ?", stnum).where("streetname = ?", stname).pluck(:id).first
end
end
プロパティの部分的な _form には、collection_select を使用して、ユーザーが任意の建物の住所 (例: 999 Decarie) を選択できるようにする form_for ループがあります (選択/オプションの HTML ドロップダウン リストとしてレンダリングされます)。
<div class="field" id="selection">
<%= f.collection_select :buildinginfo, Building.all, :half_address, :half_address, {:label => "Building Info"}%>
</div>
では、目立たないjavascript/ajaxを使用するにはどうすればよいですか
A. ユーザーがフォームでそれを選択するとすぐに、コレクション select の選択された値を取得し、それを上記の建物モデル メソッド (self.search(search)) に渡します。これにより、正しい建物 ID が返されます。
B. メソッドによって返された建物 ID をすぐに取得し、フォームの非表示フィールド (Properties モデルの building_id フィールドに対応) に格納します。(以下のコードでは、値 1 を建物 ID に置き換えたい)
<div class="field" id="selection_id">
<%= f.hidden_field :building_id, :value => 1 %>
</div>
したがって、建物を削除すると、関連するすべてのプロパティも削除されるように関連付けを機能させることができます。
さらにコードが必要な場合はお知らせください。Rails 4 を使用しています。どうもありがとうございました。