好吧所以我对这个铁轨的东西很新,所以请耐心等待......
我正在尝试制作最简单的应用程序,圣诞节清单,我需要一些帮助。让我来填写你:
我为一个人和一个项目搭建了脚手架。我稍微修改了一下模型,这就是它们的样子。
class Person < ActiveRecord::Base
has_many :item, :dependent => :destroy
end
class Item < ActiveRecord::Base
belongs_to :person
end
class CreateItems < ActiveRecord::Migration
def change
create_table :items do |t|
t.integer :person_id
t.string :description
t.timestamps
end
end
end
class CreatePeople < ActiveRecord::Migration
def change
create_table :people do |t|
t.string :name
t.timestamps
end
end
end
似乎很酷。 people_controller上的索引操作列出了所有人(duh)
<% @people.each do |person| %>
<tr>
<td><%= link_to person.name, "/people/#{person.id}" %></td>
</tr>
<% end %>
当你点击一个时,它会调用show action(同一个控制器)来获取该人的所有项目
def show
@person = Person.find(params[:id])
@items = Item.where(:person_id => params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @person }
end
end
并拉出节目视图
<table>
<% @items.each do |item| %>
<tr>
<td><%= item.description %></td>
<td><%= link_to 'Edit', edit_item_path %></td>
<td><%= link_to 'Remove', "" %></td>
</tr>
<% end %>
</table>
<br/>
<%= link_to 'Add', :controller => :items, :action => :new, :id => @person.id %>
底部的链接是为我们正在查看的摘要的人添加新项目。那么在我有的items_controller的新动作中:
def new
@item = Item.new
@item.person_id = params[:id]
respond_to do |format|
format.html # new.html.erb
format.json { render json: @item }
end
end
现在我知道在调用@ item.save之前不会保存。我想这是从_form.html.erb提交按钮发生的,该按钮又调用控制器中的创建动作?
def create
@item = Item.new(params[:item])
respond_to do |format|
if @item.save
format.html { redirect_to @item, notice: 'Item was successfully created.' }
format.json { render json: @item, status: :created, location: @item }
else
format.html { render action: "new" }
format.json { render json: @item.errors, status: :unprocessable_entity }
end
end
end
我只是有点困惑,为什么它永远不会被设置,似乎应该这么容易(我确定它是哈哈)。另外,当我在这里时,您可能已经注意到我上面的“删除”链接没有链接。这是因为我也无法弄清楚如何从该链接中删除操作以删除正确的项目。
就像我说的,这对我来说都是新的。我感谢任何帮助!请随意批评我在这里所做的一切。我没有感情:))
答案 0 :(得分:1)
正如Vibhu所说,你的问题很可能源于你has_many :items
控制器中应该Person
(注意复数)。
要在表单中添加指定此人ID的隐藏字段,请在您的创建表单中添加:
f.hidden_field :person_id