所以我不確定如何實現這一點,或者如果它甚至可能並且難以搜索類似的示例/答案。但是有沒有辦法在你提交它之前動態加載模型關聯,如之前,就像不知道實例變量會提前?在提交之前動態地在Rails表單中加載模型關聯
我的產品型號如下:
Property
has_many :owners, inverse_of: :property
has_many :orders
Owners
belongs_to :property
Orders
belongs_to :property
has_many :owners, through: :property
在我orders.new
形式我有選擇框,選擇屬性,以創建新秩序的關聯(通過選擇二插件):
<%= bootstrap_form_for(@orders, ...) do |f| %>
...
<%= f.select :property_id, options_from_collection_for_select(Property.all, "id", "full_address"),
{ label: "Property:", include_blank: true }, { id: "orderPropSelect", data: { placeholder: "Select a Property"} } %>
...
<% end %>
所以當有人選擇property
作爲新訂單時,有沒有什麼方法可以在表單提交之前加載屬性已經關聯的owners
?即使只是能夠看到什麼業主已經在那裏沒關係(能夠編輯它們會更好,但我認識到這可能更復雜)
下面的代碼當然不工作,但尋找沿着行:
<%= f.static_control label: "Property Owners" do %>
<% :property_id.owners.each do |owner| %>
<%= owner.name %>
<% end %>
<% end %>
我試過的fields_for
的變化,但我不知道如何告訴嵌套字段是基於什麼關選擇在上述select
(當然加載不同的業主基於什麼property
我得到的錯誤是undefined method owners for nil:NilClass
這是適當的,因爲我知道我不告訴鐵路在哪裏看正確。
所以這是可能的,如果是這樣,我將如何實現這一目標?
(我用的自舉形式寶石櫃面你想知道關於形式的語法。我也有裝繭其他形式的所以如果有使用該那麼我不反對的方式。)
更新工作代碼,針對外部條件稍作修改。
$("#orderPropSelect").off().on('change', function() {
var id = $(this).val();
console.log(id);
if (id !== '') {
$.ajax({
url: '/properties/' + id + '/owners',
dataType: "json",
success: function (data) {
owners_html = '';
$.each(data['owners'], function() {
owners_html += '<p>' + this + '</p>';
});
if (owners_html === '') {
$("#propOwnersShow").html('<p>No owner added yet.</p>');
} else {
$("#propOwnersShow").html($(owners_html));
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log(errorThrown);
}
});
} else {
$('#propOwnersShow').html('Please select a Property below to view its associated owners.')
}
});
是的,你會使用Ajax和JavaScript做的正是這一點。你會給form_field一個ID,然後當用戶觸發該元素上的事件時,使用jquery觸發對服務器的ajax調用。 – bkunzi01
任何機會,你可以寫一個答案與例如如何做到這一點?如果我能得到它的工作,我會接受它,預先感謝! –
也許有人可以爲你做一個完整的答案,但我超時,所以我會發佈一個答案,讓你走上正軌。 – bkunzi01