【发布时间】:2014-07-27 05:59:22
【问题描述】:
我对 Rails 很陌生,因此在同时处理 AJAX、UJS 和 Rails 时有很多困惑。我查看了 railscast,几个 SO 答案,尝试了 freenode 上的#rubyonrails IRC 频道。 唉,我还是卡住了。
无论如何,这是我的问题。
所以我有两个模型,建筑和财产。属性属于_to Building 和 Building has_many Properties。
我已将外键添加到 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,非常感谢!
【问题讨论】:
标签: ruby-on-rails ajax form-for ujs collection-select