Ruby on Rails - 未定义的方法 - Rails 3.2.13

时间:2016-09-22 21:52:08

标签: ruby-on-rails ruby

不幸的是,我们的Ruby Developer不在城里,我们遇到了一个需要解决方法的问题,直到他能够返回。我的任务是找到它。

我正在尝试访问我们的一个数据库视图hr_accounts_view,其中包含我们需要合并到现有页面中的必要数据,这些数据依赖于完全不同的表。我们试图引入的只是我们视图中的状态列,所以我尽力保持模型/控制器/视图尽可能简单。

我的hr_account_view模型:

class HrAccountView < ActiveRecord::Base

    self.table_name = 'hr_accounts_view'

    include Savable

    # belongs to :hr_account
    belongs to :employee, foreign_key: :id


    validates :Status, presence: true



    end

Hr_Account_Views控制器:

class HrAccountViewsController < ApplicationController

load_and_authorize_resource

def show
    @HrAccountView.Status = HrAccountView.Status
end

private

end

我还将视图分离到视图中的自己的文件夹中,试图使其与新控制器相关联。我们将在常规展示页面中呈现此页面。

从我们的节目中调用的页面,hraccountsview / _apptment.html.erb:

<table>
  <tr>
    <td>
     Status<br />   
         <%= display_text_field @HrAccountView.Status %> 
    </td>
  </tr>
 </table>

我已经阅读了大量帖子,引用了这个问题,看起来问题是控制器中的声明丢失,但我尝试了各种组合。不幸的是,我在ruby和rails中做的最多的是次要的页面更改和一些搜索功能,但从来没有必要添加额外的表/视图。

根据错误消息,我有一个未定义的方法'状态'为nill:NillClass,它发生在我正在呈现的页面的第5行。如果我输入急救,页面将至少显示标题,但没有数据。正在预览的记录当前具有“状态”列的填充记录。这让我相信模型而不是控制器存在问题,但是在这一点上,我一直在试图找出丢失连接的位置。

有没有人知道我在哪里错过连接?

非常感谢您的帮助!

Rails版本3.2.13 数据库版本:SQL 2012

2 个答案:

答案 0 :(得分:0)

def show @HrAccountView.Status = HrAccountView.Status end

除非我遗漏了某些内容,否则@HrAccountView未在任何地方定义,因此它是一个零对象,这意味着您无法访问该属性Status。您应该先向其中声明一些内容,例如@HrAccountView = HrAccountView.find(params[:id])。这会将您视图中的单个记录(如果找到)加载到变量中。

答案 1 :(得分:0)

有一些惯例可能有所帮助:

属性(列的模型版本)以小写形式指定。所以:

validates :status, presence: true

实例变量相同。 E.g:

def show
  @status = HrAccountView.Status
end

我怀疑HrAccountView.Status可能也是错的,但可能不是。我们需要看看控制器中还有什么。通常,有一些操作使用请求中的参数值在模型上执行find

控制器中的变量名称和视图必须匹配:

<%= display_text_field @status %>

在Ruby中,大写字符串(例如Status)是常量,小写字符串是对变量或方法的引用。如果以'@'为前缀,则它是对实例变量的引用。