1

Rails アプリケーションでルックアップ テーブルを作成しました。

これは、ドロップダウン ピッカーまたは場合によってはチェック ボックスのルックアップ テキスト値を格納するテーブルです。ルックアップ テーブルにビューを関連付けて、値を簡単に編集できるようにします。また、将来的には、1 つのフィールドに対して複数のモデル間でルックアップ値を共有したいと思うかもしれません。

これまでのところ、値の選択で機能させることができましたが、ショーまたはインデックス ビューでテキスト値を再度表示するのは問題がありました。

これは私がルックアップテーブルを構築した方法です

rails g scaffold Lookup field_name lookup_text table_name note

フィールドのルックアップがある edit.html.erb には、このようなコードがあります。これは機能し、リストから選択できるようにします。

<div class="field">
    <%= f.label :status %><br />
    <%= f.collection_select :status, Lookup.find(:all,:conditions => ["table_name = 'course' and field_name = 'status'"]), :id, :lookup_text, include_blank: true,:prompt => "Status" %>
</div>

それはすべてうまくいきます。表示しようとすると、正しい構文が見つかりません。私が見つけた最高のものはこれです:(コントローラー内)

@status = Lookup.where(:id => @course.status).pluck(:lookup_text)

(ビューで)

<p>
  <b>Status:</b>
  <%= @status %>
</p>

オブジェクト全体を取得していると思います。次のように表示されます。

ステータス: [「アクティブ」]

私の質問は次のとおりです。(1) 値のみを表示するにはどうすればよいですか? (2)これは最善のアプローチですか?

これらおよびその他のSOの質問を見てきましたが、実際に探しているものはありません:

ルックアップテーブルを使用した Rails ポリモーフィック

Rails でルックアップ テーブルを実装する

編集 OKこれは機能しますが、正しい解決策ではないようです。誰かがこれを行うためのより良い方法を持っていますか?

@status = Lookup.where(:id => @course.status).pluck(:lookup_text)[0]
4

1 に答える 1

1

値を表示する別の方法は次のとおりです。@status = Lookup.find(@course.status).lookup_text

さまざまなルックアップにクラスを使用してみませんか。

class CourseStatus < ActiveRecord::Base
  set_table_name "lookups"
  default_scope where("table_name = 'course' and field_name = 'status'")
end

class Course
  belongs_to :course_status
end

その後、次を使用できます。

CourseStatus.all # e.g. to fill select options
Course.first.course_status.lookup_text # => "Active" or smth else

またはクラスなし:

class Lookup
  def self._by_table_and_field(table, field)
    ['table_name = ? and field_name = ?', table, field]
  end

  scope :by_table_and_field, lambda { |table, field| 
    where(Lookup._by_table_and_field(table, field))
  }
end

class Course
  belongs_to :status, class_name: 'Lookup', conditions: Lookup._by_table_and_field('course', 'status')
end

Lookup.by_table_and_field('course', 'status').all
Course.first.status.lookup_text
于 2012-10-25T15:11:04.740 に答える