2017-09-06 20 views
0

私はalias_attributeなどのアトリビュートをアソシエーションを通じてアトリビュートに使用したいと考えています。 delegateと似たようなことができますが、生成されたすべてのメソッド(attribute=attribute?など)を委譲する必要があります。RoRのbelongs_toまたはhas_one関連付けによって属性の別名を付けることはできますか?

は、この可能性のようなものです:

class State < ApplicationRecord 
    has_many :cities 
end 

class City < ApplicationRecord 
    belongs_to :state 

    alias_attribute :state_flag, :state.flag 
end 

答えて

0

あなたはこれについてdelegateと悩んでいますか?良いことは、必要なすべてのメソッドを1行に委譲できることです。

belongs_to :state 

delegate :flag, :flag=, to: :state, prefix: true 

あなたはしかし、あなたがflag=を委任している場合、あなたが街を保存するときに関連した状態を保存するために覚えておく必要があります。

1

私はここで行うための最も簡単なものではなく、別名の方法を使用することだと思います。以下のような

何か:

class City < ApplicationRecord 
    belongs_to :state 

    def state_flag 
    state.flag 
end 

次に、あなたが呼び出すことができるでしょう:city.state_flagは、状態フラグを取得します。

+0

これは検索には使用できますが、割り当てはできません。また、 'state_flag?'、 'state_flag_changed'などのヘルパーメソッドをすべて追加するわけではありません。 –

関連する問題