通常情況下,爲了得到一個日期選擇軌道,我寫這篇文章:分離年,月,日軌形成
<%= form_for(:buddy, :url => {:action => :create}) do |f| %>
<%= f.date_select(:dob) %>
<%= f.submit("HI") %>
<% end %>
,並得到這個網站的結果:
<form action="/buddy/create" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="Qs8RK+6gEt9ZoycMbMHwX4xMyoFpRvjA/El3cLnO30RXddr864WmEXzyAgYtXBe5Y9l0zC3UDw4ggRw1xYW1sg==" />
<select id="buddy_dob_1i" name="buddy[dob(1i)]">
<option value="2010">2010</option>
<!-- ETC -->
<select id="buddy_dob_2i" name="buddy[dob(2i)]">
<option value="1" selected="selected">January</option>
<!-- ETC -->
<select id="buddy_dob_3i" name="buddy[dob(3i)]">
<option value="1">1</option>
<!-- ETC -->
<input type="submit" name="commit" value="HI" />
但現在我正在使用bootstrap。如果我使用bootstrap_form_for gem,我遇到了小屏幕上的問題,三個選擇放在彼此的頂部,這是不可接受的。所以我想出了我認爲是一個很好的解決方案:將每個選擇放置在表格的不同字段中,這可以防止行爲。所以我寫了這個代碼:
<%= form_for(:buddy, {:action => :create, :role => 'form'}) do |f| %>
<div class="form-group">
<label for="buddy_dob">Date of Birth</label>
<table class="table functional-table">
<tr>
<td>
<%= select_year(Date.today, {:start_year => DateTime.now.year, :end_year => DateTime.now.year - 117}, {:name => 'buddy[dob(1i)]', :id => 'buddy_dob_1i', :class => 'form-control'}) %>
</td>
<td>
<%= select_month(Date.today, {}, {:name => 'buddy[dob(2i)]', :id => 'buddy_dob_2i', :class => 'form-control'}) %>
</td>
<td>
<%= select_day(1, {}, {:name => 'buddy[dob(3i)]', :id => 'buddy_dob_3i', :class => 'form-control'}) %>
</td>
</tr>
</table>
</div>
<div class="form-group">
<%= f.submit("HI") %>
</div>
<% end %>
產生這樣的結果:
<form role="form" action="/buddy/new" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="6Ek01J6PIgzHl/NLpjI6V+kolUVCpw7jrQTF8eYT3ef98/8Dm6qWwuLG1kHnr92xBr0rCAY1+S1xzK60mli3EQ==" />
<div class="form-group">
<label for="buddy_dob">Date of Birth</label>
<table class="table functional-table">
<tr>
<td>
<select id="buddy_dob_1i" name="buddy[dob(1i)]" class="form-control">
<option value="2015" selected="selected">2015</option>
<!-- ETC -->
</td>
</tr>
</table>
<table class="table functional-table">
<tr>
<td>
<select id="buddy_dob_2i" name="buddy[dob(2i)]" class="form-control">
<option value="1" selected="selected">January</option>
<!-- ETC -->
</td>
</tr>
</table>
<table class="table functional-table">
<tr>
<td>
<select id="buddy_dob_3i" name="buddy[dob(3i)]" class="form-control">
<option value="1" selected="selected">1</option>
<!-- ETC -->
</td>
</tr>
</table>
<div class="form-group">
<input type="submit" name="commit" value="HI" />
</div>
</form>
這種情況的顯示器的工作原理正是我想要的,但是當我試圖提交我重定向到行動的形式:新的沒有通過rails註冊的錯誤,並且沒有創建條目。我從來沒有達到過:創造。我懷疑這可能是因爲我已經手動分隔了date_select分隔的那些日期字段,然後再回到一起,並且rails無法處理這個問題,但我不確定。我該如何解決這個問題並讓表單工作?
這些名稱是處理組合數據的標準軌道方式,它們在創建參數時由ActionDispatch正確處理,然後由'assign_attributes'方法將它們轉換爲Date或Time(取決於數據庫中列的類型) – BroiSatse