1

動的変数名/オブジェクトを作成するにはどうすればよいですか?

リクエストを送信し、承認時にモデルを結合するためのポリモーフィック モデルがあります。たとえば、ユーザーは会社、プロジェクト、またはグループなどに参加できます。

だから私はさまざまなモデルに属しているプロファイルモデルを持っていますが、リクエストが受け入れられたら関係を構築したいだけです。

profile.rb

class Profile < ActiveRecord::Base
    belongs_to :user
    belongs_to :company
    has_many :requests
    has_many :requested, as: :requestable

    attr_accessible :first_name, :last_name


    validates :first_name, presence: true
    validates :last_name, presence: true

end

コントローラーが処理しているモデルに基づいてアクションを適用できるようにする必要があります。

@profile.@belongs_to が @profile.company と同じになることを期待していましたが、この場合はゼロになります。そこから @profile.@belongs_to = @requestable

プロファイルは常にモデルに所属するため、参加する @belongs_to は常に小文字のモデル名になります。

これを理解しようと、フラッシュ メッセージに投稿されたオブジェクトの内容をいじっています。

requests_controller.rb

class RequestsController < ApplicationController
 before_filter :load_requestable
     def accept
        @request = Request.find(params[:id])
        @profile = Profile.find(@request.profile.id)

        redirect_to [@requestable, :requests], notice: "#{@profile.@belongs_to} #{@request.profile.first_name} #{@request.profile.last_name} id: #{@request.profile.id} wants to join #{@requestable.name}  id: #{@requestable.id}"
     end

     private

     def load_requestable
       klass = [Company, Profile].detect { |c| params["#{c.name.underscore}_id"]}
       @requestable = klass.find(params["#{klass.name.underscore}_id"])
       @belongs_to = klass.to_s.downcase
    end
 end

私はコンソールで次のようなことをしてみました:

profile = Profile.first
profile.company = Company.first 

これにより、保存できるオブジェクトに結合が作成されます。

4

1 に答える 1

2

あなたの協会が含まれている場合@belongs_toは、簡単に電話をかけることができます。@profile.send(@belongs_to)@profile.send("#{@belongs_to}=",@requestable)

#sendRuby の任意のオブジェクトに任意のメッセージを送信できます。動的メソッド呼び出しを考えてみてください。

そして、あなたはやるべきです

于 2012-07-01T12:48:19.793 に答える