【问题标题】:How to display ROR 5 ActiveRecord pluck as String in html.erb如何在 html.erb 中将 ROR 5 ActiveRecord pluck 显示为字符串
【发布时间】:2017-05-16 12:42:50
【问题描述】:

在 html.erb 我有:

<%= ContactDescribe.where(["contact_describe_id = ?", "12"]).limit(1).pluck(:borrower_or_lender_text)  %> 

字段检索成功。但返回一个数组元素。我需要学习如何将该元素转换为字符串。

【问题讨论】:

  • 不要在视图中查询复杂的东西
  • 这是一个不错的问题,不应该被否决。

标签: ruby-on-rails activerecord pluck


【解决方案1】:

除了Deepak的回答,还可以把Array转成“Sentence”字符串

<%= ContactDescribe.where(contact_describe_id: 12).limit(1).pluck(:borrower_or_lender_text).to_sentence %>

建议:

  • 正如 TheChamp 所指出的,最佳实践是已经“准备”视图中所需的值作为来自控制器的实例变量。查看我推荐的重构

    # controller
    def YOUR_ACTION_NAME
      @contact_describe = ContactDescribe.where(contact_describe_id: 12).first
    end
    
    # view
    <%= @contact_describe.borrower_or_lender_text %>
    

注意:你甚至不再需要 pluck 除非你有其他理由想要limit(1)

【讨论】:

  • 感谢您的建议。好的,这对我来说是新的。在控制器中,显示视图我只定义父记录。我还可以定义像@contact_describe 这样的附加值吗?
  • @emm,是的,“通常”,随意在控制器中添加你想要的 instance_variables。 instance_variables 通常是 Record 对象/任何需要放入“变量”中才能在视图上显示的复杂内容。但是,不要太得意忘形,将视图中所有可能的代码分配为实例变量! :) (例如:不要在控制器中执行以下操作!@contact_describe_borrower_or_lender_text = ContactDescribe.where(contact_describe_id: 12).first.borrower_or_lender_text,因为您可能需要在未来的视图中重用 @contact_describe
【解决方案2】:

这里的问题是 where 返回一个集合 - 类似于数组的东西,只是在 ActiveRecord 中 - 无论您对其设置什么限制。要检索信息,您将使用 .first[0],因为您始终只返回一个对象。

但是,因为您正在寻找特定的ContactDescribe 对象。 改为这样做:

ContactDescribe.find_by(contact_describe_id: 12).borrower_or_lender

此外,您还应该在代码中改进两点。

1:逻辑应该进入控制器或模型。视图仅用于显示对象。

2:contact_describe_id 字段是怎么回事?为什么不叫它id。似乎是多余的。 user.id不是比user.user_id方便吗?

【讨论】:

    【解决方案3】:

    您可以使用join

    <%= ContactDescribe.where(contact_describe_id: 12).limit(1).pluck(:borrower_or_lender_text).join(',')  %>
    

    【讨论】:

    • 那是不同的部分
    • 主要问题不同,这个答案解决了主要问题
    • @TheCha͢mp SO 的政策是Be Nice。如果你不同意这个答案,然后投反对票,这就是他们的目的。没有必要像这样的cmets,它只会浪费每个人的时间。 DeepakMahakale 没有义务帮助任何人
    • 是的,我想我太情绪化了......,对不起迪帕克
    • 谢谢。在不同的上下文中,这个建议可能有用。还是建议加入荒谬的,因此 The Champ cmets?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多