rails_admin在编辑belongs_to关联时显示用户名而不是用户ID

时间:2015-07-11 11:12:38

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

我有一个使用Rails Admin的Rails 3.2.21应用程序。

我为特定模型ClockEvent编写了一个初始值设定项,用于我的所有操作。特别是在列表/显示/编辑操作中,我想显示实际用户的全名,而不是用户#1。

从下面的代码中,我有列表并显示使用pretty_value,但在编辑操作时我感到困惑如何让下拉/搜索字段显示用户full_name(这是一个User.rb中的字段而不是用户#1。

以下是我的代码。

user.rb

has_many :clock_events

clock_event.rb

belongs_to :user

配置/初始化/ rails_admin.rb

RailsAdmin.config do |config|
  config.authorize_with do |controller|
    unless current_user.role == 'admin'
      redirect_to main_app.root_path
      flash[:error] = "You are not an admin"
    end
  end

  config.model 'ClockEvent' do
  configure :user, :belongs_to_association
  configure :station, :belongs_to_association
    list do
      field :clock_in
      field :clock_out
      field :user do
        pretty_value do
            value.try(:full_name)
        end
      end
      field :station do
        pretty_value do
            value.try(:station_name)
        end
      end
      field :created_at
      field :updated_at
    end

    show do
      field :clock_in
      field :clock_out
      field :user do
        pretty_value do
            value.try(:full_name)
        end
      end
      field :station do
        pretty_value do
            value.try(:station_name)
        end
      end
      field :comment
      field :hr_comment
      field :created_at
      field :updated_at
    end

    edit do
      field :clock_in
      field :clock_out
      field :user do
        pretty_value do
            value.try(:user).try(:full_name)
        end
      end
      field :station do
        pretty_value do
            value.try(:station_name)
        end
      end
      field :comment
      field :hr_comment
      field :created_at
      field :updated_at
    end
    export do; end
    create do; end
    update do; end
 end
end

正如你所看到的那样,我也是为另一个工作的belongs_to模型做这个,但是我专注于用户模型以及如何让编辑字段按用户名或全名进行搜索,而不是显示用户#1是没有价值的。

如果您有任何建议或解决方案,我真的很感激。 rails_admin wiki对这种特定类型的东西没那么有用,我已经把它倾倒了。

如果您需要更多说明或我的问题/代码不够明确,请询问。

1 个答案:

答案 0 :(得分:1)

我自己想出来了。我需要在user_idstation_id字段上调用枚举,然后使用集合来将名称映射到ID。这有效!

RailsAdmin.config do |config|
  config.authorize_with do |controller|
    unless current_user.role == 'admin'
      redirect_to main_app.root_path
      flash[:error] = "You are not an admin"
    end
  end

  config.model 'ClockEvent' do
    list do
      field :clock_in
      field :clock_out
      field :user do
        searchable :full_name
        pretty_value do
            value.try(:full_name)
        end
      end
      field :station do
        searchable :station_name
        pretty_value do
            value.try(:station_name)
        end
      end
      field :created_at
      field :updated_at
    end

    show do
      field :clock_in
      field :clock_out
      field :user do
        pretty_value do
            value.try(:full_name)
        end
      end
      field :station do
        pretty_value do
            value.try(:station_name)
        end
      end
      field :comment
      field :hr_comment
      field :created_at
      field :updated_at
    end

    edit do
      field :clock_in
      field :clock_out
      field :user_id, :enum do
        enum do
          User.employee.collect {|p| [p.full_name, p.id]}
      end
    end
      field :station_id, :enum do
        enum do
          Station.all.collect {|p| [p.station_name, p.id]}
      end
    end
      field :comment
      field :hr_comment
      field :created_at
      field :updated_at
    end
    export do; end
    create do; end
    update do; end
 end

 config.model 'CallUnit' do
  visible false
 end

 config.model 'CallSpecialEquipment' do
  visible false
 end

  config.model 'CallsFacilities' do
  visible false
 end
end