【发布时间】:2015-04-23 21:21:56
【问题描述】:
我是 Ruby on Rails 的新手。我的项目中有两个模型:房间和客人。关联是“房间有_很多客人”和“客人属于房间”。
我为管理房间和客人设置了不同的视图。房间不需要“客人”的创造价值。但是,我想创建新客人并同时将其分配到某个房间。正确的方法是什么?如何从网络传输输入并匹配数据库中的实体。
代码与"Getting Started with Rails" 几乎相同。在教程中,他们在“文章”视图中添加了“cmets”,并使用“评论”作为“文章”的子资源。就我而言,我平等对待这两个模型,并希望在单独的视图中管理它们。
更新:
我使用了 collection_select 并尝试使用我的 guest_controller。
<%= form_for :guest, url: guests_path do |f| %>
<% if @guest.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@guest.errors.count, "error") %> prohibited this guest from being added:
</h2>
<ul>
<% @guest.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :name %><br>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :phone %><br>
<%= f.text_field :phone %>
</p>
<p>
<%= f.label :room%><br>
<%= f.text_field :room %>
</p>
<p>
<%= f.label :room %><br>
<%= f.collection_select(:room_id, Room.all, :id, :title) %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
<%= link_to 'Back', guests_path %>
在我的guest_controller中,上面表格调用的create方法是:
def create
@guest = Guest.new(guest_params)
@guest.room = Room.find(params[:room_id])
if @guest.save
redirect_to @guest
else
render 'new'
end
end
但是,当我创建一个新来宾时,它显示:
ActiveRecord::RecordNotFound in GuestsController#create
Couldn't find Room with 'id'=
我检查了 room_id=4 和 Room.find(4) 返回了正确的房间。 怎么了?
【问题讨论】:
标签: ruby-on-rails