创建了两个模型....模型中也提到了关联。
第一个模型是Item,第二个模型是Activity。
项目型号代码:
class Item < ActiveRecord::Base
has_many :activities
end
活动模型代码:
class Activity < ActiveRecord::Base
belongs_to :item
end
我可以通过链接显示每个项目.....现在我想要对该特定项目进行活动,为此我创建了一个控制器,它是&#34;活动&#34;然后我写了代码,如下:
活动型号代码:
class ActivitiesController < ApplicationController
def create
@item = Item.find(params[:item_id])
@activity = @item.activities.create(activity_params)
redirect_to items_path(@item)
end
private
def activity_params
params.require(:activity).permit(:task)
end
end
项目控制器的show.html.erb代码如下:
Show.html.erb(Items_controller)代码:
<h1>Show Goal</h1>
<p>
<strong>Goal: </strong>
<%= @item.goal %>
</p>
<p>
<strong>Description: </strong>
<%= @item.description %>
</p>
<h2>Activity</h2>
<% @items.activities.each do |activity| %>
<p>
<strong>Activity:</strong>
<%= activity.task %>
</p>
<% end %>
<h2>Add a Activity:</h2>
<%= form_for([@item, @item.activities.build]) do |f| %>
<p>
<%= f.label :Task %><br>
<%= f.text_field :task %>
</p>
<%= f.submit "Add Activity"%>
</p>
<% end %>
<%= link_to 'Edit', edit_item_path(@item) %>
<%= link_to "Back" , items_path %>
错误来自这一行,它说&#34;未定义的方法`活动&#39;为零:NilClass&#34;
<% @items.activities.each do |activity| %>
&#34;活动&#34>的迁移代码模型
迁移活动模型代码:
class CreateActivities < ActiveRecord::Migration
def change
create_table :activities do |t|
t.string :task
t.timestamps null: false
end
end
end
现在我无法弄清楚这个错误来自哪里&#34;未定义的方法`活动&#39;为零:NilClass&#34; .... ????????
答案 0 :(得分:1)
@items
为零,因为您只定义了@item
答案 1 :(得分:1)
错误说"undefined method activities' for nil:NilClass"
哪个是正确的@items
是 nil
回到控制器@item,有一个错字
另外检查迁移文件,在Activity
的迁移文件中,如果没有使用
item_id
的外键。
rake db:migrate:down VERSION=migration number
并编辑该文件并重新运行rake db:migrate
答案 2 :(得分:0)
将以下行替换为
<% @items.activities.each do |activity| %>
到
<% @item.activities.each do |activity| %>
答案 3 :(得分:0)
您需要创建迁移,以便将item
的引用添加到activity
rails g migration AddItemToActivities item:references
然后您的文件应如下所示:
class AddItemToActivities < ActiveRecord::Migration
def change
add_reference :activities, :item, index: true
end
end
然后你可以通过这种方式轻松循环:
<% @item.activities.each do |activity| %>
...