帮助rails关联

时间:2010-09-24 02:39:04

标签: ruby-on-rails ruby model associations

好的伙计们,所以我正在制作一个调度程序。

所以到目前为止我有两张桌子, 显示“title:string”和“description:text”,我也有 开演时间; “show_id:integer”,“day:string”和“show_time:time”。

我做了has_many和belongs_to,老实说我不知道​​从哪里开始,

我希望用户能够在创建新节目时添加时间。我该怎么办?我正在查看一些rails协会文件,似乎我会做类似的事情,

@showtime = @shows.showtimes.create(:show_id => show.id, :day => DAY, :show_time => TIME)

注意我只放了DAY和TIME,因为我老实说也不知道我将如何获取这些数据。

1 个答案:

答案 0 :(得分:2)

这取决于你的界面。但为简单起见,我们假设您提供了两个用于选择日期和时间的选择框,并且必须逐个添加ShowTime

并假设您有其他资源:

map.resources :shows do |show|
  show.resources :show_times
end

表单:(给定已创建的@show对象)

<% form_for @show_time, :url => show_show_time_path(@show) do |form| %>
  <%= form.label :day %>: <%= form.select :day, [["Mon", "mon"], ["Tue", "tue"]], {} %>
  <%= form.label :show_time %>: <%= form.select :show_time, [["Slot 1", "09:00"]], {} %>
<% end %>

您应该提供最佳方式来生成day&amp; show_time个数组。它们具有以下结构:

[["Text", "value"], ["Text", "value"]]

将生成如下内容:

<option value="value">Text</option>

提交表单后,在您的创建操作中:

def create
  @show = Show.find params[:show_id] # this params[:show_id] is from the rest resource's path
  @show_time = @show.show_times.build(params[:show_time]) # this params[:show_time] is from the form you submitted

  if @show_time.save
    flash[:notice] = "Success"
    redirect_to show_show_time_path(@show, @show_time)
  else
    flash[:notice] = "Failed"
    render :action => "new"
  end
end