0

過去にいくつかの RoR サイトを書いたことがありますが、コードを見ているだけだったので、自分の意見を DRY することにあまり悩まされたことはありませんでした。

新しいサイトを始めたばかりで、コラボレーションである可能性が高く、助けが必要です

私はこの行を自分のビューで複数回、複数の場所から呼び出します。

<%= Person.find_by_id(rider.person_id).name %>

できるようになりたい

<%= get_name(rider.person_id) %>

だから私はこのコードをどこかに置くと思います

def get_name=(id)
    Person.find_by_id(id).name
end

しかしここで?モデルとヘルパーとして試してみましたが、常に nomethoderror が発生します。

4

4 に答える 4

0

application_controller.rbを試してください

于 2009-11-17T13:22:16.510 に答える
0

名前を返すだけのRiderクラスのメソッドはどうですか?

def name
   person = Person.find_by_id( @person_id )
   if !person.nil?
      return person.name
   end
   return nil
end

使用されます

<%= rider.name %>

または、Personクラスでstatic/classメソッドを使用できます。

 def Person.get_name( rider )
     if !rider.nil?
       person = find_by_id( rider.person_id )
       if !person.nil?
          return person.name
       end
     end
     return nil
 end

と呼ばれる

 <%= Person.get_name( rider ) %>

ビューコードでIDへの参照を削除したことに注意してください。

于 2009-11-17T13:25:20.613 に答える
0

Rails は、構成よりも規則がすべてです。すべてのヘルパー メソッドは、オーバーライドされない限り、最も一般的なオプションを想定しています。ただし、ActiveRecord モデルには便利なデフォルトの to_s がありません。

デフォルト アクションの指定:

class Person < ActiveRecord::Base
  def to_s
    name
  end
end

これで、文字列コンテキストで person インスタンスを評価しようとするたびに、名前が取得されます。

そう

<%= Person.find_by_id(rider.person_id).name %>

と交換できるようになりました

<%= rider.person %>

それ以外の場合は、フィールドとメソッドを指定できます。

于 2009-11-17T15:32:04.190 に答える
0

このメソッドの名前は間違っています。なぜメソッド名に「=」記号を入れるのですか?

このコードはコントローラーでのみ呼び出す必要があり、ビューでは結果のみをレンダリングする必要があります。このメソッドの最適な場所はヘルパーです。

def get_person_name_by_id(id)
  Person.find_by_id(id).name || nil
end
于 2009-11-17T13:29:17.933 に答える