【发布时间】:2014-04-14 08:37:17
【问题描述】:
我在 Rails 中使用 form_for-tag 时遇到问题。
我有以下型号:
节假日
id | name
___________|_____________
123 | "asdf"
345 | "foo"
757 | "bar"
假期
id | date
___________|_____________
223 | 1998-03-11
445 | 1999-06-21
557 | 2009-09-20
国家
id | name | country_code
___________|_____________|________________
667 | "italia" | "it"
987 | "france" | "fr"
999 | "austria" | "au"
R_Countries
id | country_id| holiday_id
___________|_____________|________________
463 | 667 | 123
574 | 987 | 345
687 | 999 | 757
R_Holidates
id | holidate_id| holiday_id
___________|______________|________________
142 | 123 | 223
253 | 345 | 445
362 | 757 | 557
我想使用一个表单来创建一个假期,带有名称、日期和国家,所以这将是我的_form:
<%= form_for(@holiday) do |f| %>
<% if @holiday.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@holiday.errors.count, "error") %> prohibited this timespan from being saved:</h2>
<ul>
<% @holiday.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :holidate %><br>
<%= f.date_select :holidate %>
</div>
<div class="field">
<%= f.label :country_code %><br>
<%= f.date_select :country_code %>
</div>
<div class="field">
<%= f.label :country_name %><br>
<%= f.text_field :country_name %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
但是,可以肯定的是,在执行脚本时,我得到了这个错误:
假期中的 NoMethodError#edit 显示 C:/xampp/htdocs/fluxcapacitor/app/views/holidays/_form.html.erb 其中第 20 行提出: #
的未定义方法“holidate”编辑: 这是一个设计示例,它的外观:
编辑2: 我已经用我的种子文件填充了我的数据库,其中我使用了如下脚本:
from = Date.civil(2000,1,1)
to = Date.civil(2000,12,31)
Holidays.between(from, to, :any ).each do |date|
lname = date[:name]
ldate = date[:date]
lregion = date[:regions]
Holiday.find_or_create_by(name: lname) #Holiday is created
Holidate.find_or_create_by(date: ldate) #creates a Holidate
RHolidate.find_or_create_by(holidate_id: Holidate.find_by(date: ldate).id, holiday_id: Holiday.find_by(name: lname).id) #this should create a relation between the holiday and it's date
####
lregion.each do |x|
Country.create(country_code: x, name: x)
if !(RCountry.exists?(country_id: Country.find_by(country_code: x).id, holiday_id: Holiday.find_by(name: lname).id))
RCountry.create(country_id: Country.find_by(country_code: x).id, holiday_id: Holiday.find_by(name: lname).id)
end
end
end
【问题讨论】:
-
Holidays和Holidates之间有什么关系?您需要为@holiday 的关系添加表格。请发布模型和控制器而不是表格。 -
@Monk_Code :这是一个多对多关系。难道没有办法使用单一表单来创建它吗?
-
你需要 fields_for() 在你的 form_for()
-
这是什么意思?这是做什么的?
标签: ruby-on-rails ruby form-for