不幸的是,我们的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
答案 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
)是常量,小写字符串是对变量或方法的引用。如果以'@'为前缀,则它是对实例变量的引用。