如何製作動態變量名稱/對象?Rails:用於多態控制器/模型的包裝實例變量
我有一個多態模型,用於在批准時發送請求和加入模型。 用戶可以加入公司,項目或組等的示例。
所以我有一個屬性模型belongs_to各種模型,但我只想要關係建立一旦請求被接受。
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是一樣的,在這種情況下,它就是nill。然後從@ 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: "#{@[email protected]_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
,這將創建在隨後可以保存對象的連接。