我对 Rails 很陌生,因此在同时处理 AJAX、UJS 和 Rails 时有很多困惑。我查看了 railscast,几个 SO 答案,尝试了 freenode 上的#rubyonrails IRC 频道。唉,我还是卡住了。
无论如何,这是我的问题。
所以我有两个模型,建筑和财产。属性belongs_to Building 和Building has_many 属性。
我已将外键添加到 Property 作为 building_id。
现在,在我的建筑模型中,我有一个方法: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 中,我有一个 form_for 循环,它使用一个 collection_select 来允许用户选择任何建筑地址(例如 999 Decarie),(因此它呈现为一个选择/选项 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,非常感谢!