【问题标题】:Ruby on Rails: making id in column as an alias?Ruby on Rails:将列中的 id 作为别名?
【发布时间】:2013-11-22 07:13:29
【问题描述】:

有没有办法更改模型中id 列的名称?

如果我有这样的事情:

pg_search_scope :good_search, :against => [:first_name, :last_name, :id]

我想更改 :id, as: :somethingelse,所以当我检查我的 json 值时,而不是 id,我将在循环中引用 somethingelse

<% @example.each do |e| %>
  <%= e.somethingelse %> #instead of e.id
<% end %>

这可能吗?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2


    【解决方案1】:

    试试alias_attribute

    class ModelClass < Activerecord::Base
      alias_attribute :somethingelse, :id
    end
    

    rails documentation

    【讨论】:

    • 我试过这样做,并用:somethingelse 更改我的pg_search_scope,而不是:id,但随后出现错误:PG::UndefinedColumn: ERROR: column model.somethingelse does not exist
    • rails 文档清楚地表明它应该可以工作。生成的 SQL 查询是什么?在命名范围之外使用时是否有效,例如Model.first.somethingelse
    • 它确实有效,为什么当我尝试将:somethingelse 放入pg_search_scope :good_search, :against =&gt; [:first_name, :last_name, :somethingelse] 时,出现了问题。还有其他方法可以解决这个问题吗?
    【解决方案2】:

    如果我理解正确,你想somethingelse 回来和id

    为什么不在你的 @example.class 模型中使用类似的东西:

    def somethingelse
      id
    end
    

    或者,如果您已经拥有具有不同名称的列的数据库

    set_primary_key :somethingelse #in you model
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多