如何在Ruby on Rails中获取对象结果的值

3

我希望能够从对象结果中打印特定的值。这里我正在执行 SQL 查询,并从“Employee_Information”视图(表)中获取所有数据。 hr_controller.rb

class HrController < ApplicationController

  def internal_employee_page        
    @employees = MysqlConnection.connection.select_all("SELECT * FROM Employee_Information")
  end 
end

internal_employee_page.html.erb 这是我的第一个视图。

(注:该文本已经是中文,无需翻译。)
<div id="job_details">
    <% @employees.each do |emp| %>
        <%= render partial: "hr/employee_details", locals: {emp: emp} %>
    <% end %>               
</div>

_employee_details.html.erb this is my second view

<h3> User Name : <%= emp%> </h3>

我想打印所有值 结果如下 enter image description here 我想打印每个值 我在我的第二个视图中也尝试了这个方法

<h3> User Name : <%= emp.full_name%> </h3>

但是我遇到了错误: enter image description here 请帮助我,我已经尝试了我所知道的一切,但是出现了问题,请问我错在哪里,问题出在哪里?

你为什么不使用ActiveRecord或其他ORM数据库映射器呢?看起来你想要使用它,而且在Rails中很容易实现。目前,你的所有“对象”实际上都只是Hash,因此所有对它们的操作都应在此上下文中执行。 - engineersmnky
4个回答

3
试试这个:
<h3> User Name : <%= emp["full_name"] %> </h3>

1
你正在尝试从哈希中读取值,因此emp.full_name将无法正常工作,你可以像Hash['key']那样从哈希中读取值。
因此,对于full_name,请使用<%= emp['full_name'] %>

0
<h3> User Name : <%= emp.full_name%> </h3>

full_name不是employee实例的属性,这就是为令你出现了这个错误。尝试获取该employee实例中存在的特定属性。


full_name 存在,但 employee 不是 Employee 的实例,而是 Hash 的实例。 - engineersmnky

0

现在你的响应对象只是简单的Hash对象,要访问键的值,你需要使用[]fetchHash方法来检索值。如果你想要更多类似于方法的语法,你可以做以下之一:

  • 使用ActiveRecord或另一个ORM映射器
  • 创建动态或静态类并将结果映射到它们上面
  • 使用method_missing之类的东西来猴子补丁Hash以模拟这个概念

我想再添加另一个选项,就是使用OpenStruct来实现类似的结果。 OpenStruct.new(emp)将允许他使用点符号检索该属性。 - Alexandre Angelim
1
@AlexandreAngelim 公平。我忽略了OpenStruct,因为在1.8和早期的1.9.3版本中存在内存泄漏问题(现在可能已经修复,但这让我感到不舒服)。此外,它在处理较大数据集时被证明是性能较慢的。 - engineersmnky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接