我想在show.html.erb中获取这样的数据,但它不起作用。 如何从现场表中获取数据?
这是代码。
show.html.erb
<% @planaction.each do |action| %>
<hr>
<%= action.spot.name %>
<%= action.spot.description %>
<hr>
<%= action.title %>
<%= action.experience %>
<% end %>
plan.rb
class Plan < ActiveRecord::Base
has_many :plan_actions
end
plan_action.rb
class PlanAction < ActiveRecord::Base
belongs_to :plan
has_one :spot
end
spot.rb 。
class Spot < ActiveRecord::Base
belongs_to :plan_action
end
plan_actions_controller.erb
class PlanPagesController < ApplicationController
def show
@plan = Plan.find(params[:id])
@planaction = @plan.plan_actions
end
end
,此处出现错误消息
未定义的方法`name&#39;为零:NilClass
这里是spot table的迁移文件。
class CreateSpots < ActiveRecord::Migration
def change
create_table :spots do |t|
t.integer :spot_id
t.integer :plan_action_id
t.string :name
t.text :description
t.time :time_open
t.time :time_close
t.date :dayoff
t.string :address
t.integer :tel
t.string :image
t.string :image2
t.string :image3
t.timestamps null: false
end
end
end
答案 0 :(得分:0)
对我来说很好看。
问题可能是(无法查看您的日志,但无法确定)plan_action
没有关联的spot
记录。< / p>
要解决此问题,您应该使用一些条件逻辑:
<% @planaction.each do |action| %>
<hr>
<% if action.spot %>
<%= action.spot.name %>
<%= action.spot.description %>
<hr>
<% end %>
<%= action.title %>
<%= action.experience %>
<% end %>
同样,这是猜测。我写了答案,因为我觉得最好提供一些关于如何解决它的想法。以上应该有效。
答案 1 :(得分:0)
我还认为Rich Peck在spot表中没有记录,其中plan_action_id对应于计划操作。
遵循rails惯例,我建议如下:
class PlanAction < ActiveRecord::Base
belongs_to :plan
has_one :spot
delegate :name, :description, to: :spot, prefix: true, allow_nil: true
end
并在您看来:
<%= action.spot_name %>
<%= action.spot_description %>
最后,更正您的验证。例如,如果plan_action应该有一个点,那么您需要使用嵌套表单进行现场和计划操作。