Rails模型/联接表无法正常工作

约翰·道夫

我正在尝试通过创建新的联接表“ LastViewer”来联接两个先前存在的表“ Report”和“ Person”。基本上,查看器表将跟踪上次查看报告的人员。

我通过创建文件“ last_viewer.rb”来创建Rails模型,如下所示:

class LastViewer < ActiveRecord::Base
  belongs_to :report
  belongs_to :person
end

这产生了以下迁移:

class CreateLastViewers < ActiveRecord::Migration
  def change
    create_table :last_viewers do |t|
      t.references :person
      t.references :report

      t.timestamps
    end
    add_index :last_viewers, :person_id
    add_index :last_viewers, :report_id
  end
end

现在,我开始添加代码,以便我的应用可以跟踪更改。我将以下内容添加到正确的控制器中:

@viewer = LastViewer.new
@viewer.person_id = get_current_user[:id] # correctly gets the person's ID from the correct session
@viewer.report_id = @report.id
@viewer.save

现在,在我想显示最后一个查看器的视图中,我添加了:

<% @reports.each_with_index do |report,index| %>
  <% query = LastViewer.where(:report_id => report.id).last %>
  <% name = query.person.name || "No Person found" %>
  <% time = Format.to_time(query.created_at.localtime) %>
<% end %>

我得到的错误是:

nil:NilClass的未定义方法“名称”

在线上

  <% name = query.person.name || "No Person found" %

编辑:

Person模型的各个部分:

class Person< ActiveRecord::Base
  attr_accessible :hid, :name, :email, :cell, :display
  has_many :last_viewer
end

报告模型的各个部分:

class Report< ActiveRecord::Base
  has_many :last_viewer
end
吉治先生

首先,您需要更改与此的关系:(复数has_many :last_viewers

class Person < ActiveRecord::Base
  has_many :last_viewers


class Report < ActiveRecord::Base
  has_many :last_viewers

class LastViewer < ActiveRecord::Base
  belongs_to :report
  belongs_to :person
  validates :report_id, :person_id, presence: true

然后,尝试强制创建LastViewer对象,引发错误并查看您的对象出了什么问题:

@viewer = LastViewer.new
@viewer.person_id = get_current_user[:id]
@viewer.report_id = @report.id
@viewer.save! # adding a ! will raise errors if object not valid

# one-line equivalent:
@viewer = LastViewer.create!(person_id: get_current_user[:id], report_id: @report.id)

我很确定它将出现类似“ person_id不应该为空”的错误。我认为您的方法get_current_user[:id]未返回ID。

解决此问题后,建议您将视图重构为:

<% @reports.each_with_index do |report, index| %>
  <% last_viewer = report.last_viewers.last %>
  <% last_person_name = last_viewer.try(:person).try(:name) %>
  <% time = Format.to_time(query.created_at.localtime) %>
<% end %>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

筛选器无法正常工作-内部联接表时

来自分类Dev

左联接无法正常工作

来自分类Dev

Rails模型脚手架无法正常工作

来自分类Dev

Rails无法正常工作

来自分类Dev

我的Rails样式表无法加载/正常工作

来自分类Dev

SQL查询联接无法正常工作

来自分类Dev

无法在Rails中正常工作

来自分类Dev

Rails查询无法正常工作

来自分类Dev

AngularJS表无法正常工作

来自分类Dev

格式表无法正常工作

来自分类Dev

多个工作表的宏无法正常工作

来自分类Dev

多个工作表的宏无法正常工作

来自分类Dev

模型绑定Webform TryUpdateModel无法正常工作

来自分类Dev

模型连接无法正常工作-Laravel

来自分类Dev

Python Auto ARIMA模型无法正常工作

来自分类Dev

Laravel模型渴望加载无法正常工作

来自分类Dev

模型绑定html:asp无法正常工作

来自分类Dev

MVC-模型无法正常工作

来自分类Dev

模型布尔方法无法正常工作

来自分类Dev

简单的SQL内部联接查询-无法正常工作

来自分类Dev

Linq左外部联接的查询无法正常工作

来自分类Dev

MYSQL中的内部联接与UPDATE无法正常工作

来自分类Dev

联接无法正常工作-缺少一些结果

来自分类Dev

联接查询在Laravel 4.2中无法正常工作

来自分类Dev

使用自定义密钥的数据联接无法正常工作

来自分类Dev

Rails update_attributes无法正常工作

来自分类Dev

fontawesome + Rails 4.0.1无法正常工作

来自分类Dev

Asciifolding无法正常工作Elastic Search Rails

来自分类Dev

Rails Bootstrap .span无法正常工作