我建議儘可能少做JS。因此:
首先在Rails視圖中添加隱藏字段(使用空值)。
現在,您需要將Javascript添加到您的頁面(您可能已經有一個文件在app/assets/javascripts/application.js
,包含在所有頁面中;包括帶有Rails模板的JS是它自己的問題)。你需要兩個函數和jQuery將使生活輕鬆了許多:
- ,檢查選擇變量的值,並更新從選擇標籤值隱藏的標記值的函數。
- 一個在頁面加載時運行的函數,它將一個事件監聽器附加到select標籤;這將監聽「選擇」標籤上的「更改」事件,並在它看到它時調用我們的第一個函數。
這些看起來東西這樣的(注:此代碼會爲你幾乎可以肯定不工作不需改動):
function setHiddenValue() {
// Get the value from the select tag
var selectValue = $('select#building_city_id').val();
// Set the hidden tag's value to the select tag value we got in the last line
$('input[type=hidden]#city_name').val(selectValue);
}
我猜在選擇用於獲取元素,但是Rails會將ID放在你可以使用的ID上。
$(document).ready(function() {
$('select#building_city_id').on('change', setHiddenValue());
}
顯然,這是粗糙和不會在被粘貼立即工作,你會希望確保選擇匹配的內容Rails的在你的HTML是放,你要確保腳本正在被包含在你的頁面中,並且正在設置事件監聽器,所以你需要檢查jQuery是否存在,並且你需要確保setHiddenValue
函數獲得正確的值來放置隱藏的表單標記。但這就是我如何開始你想要做的事情;剩下的就是你的頁面特有的細節。
爲什麼要將名稱保存在單獨的字段中,當它來自您的模型? –
我可以從一個select_tag保存名稱***和*** ID嗎? – Zelenka
不,瀏覽器只會將'option'標記的'value'傳遞給服務器。但是我仍然不知道爲什麼你需要通過這個名字,當你可以很容易地通過'City.find(params [:building] [:city_id])創建''行動。'name' –