私はそのように私のApplicationController
でインスタンス変数を定義しました:Railsモデルからインスタンス変数にアクセスする方法は?
@team = Team.find(params[:team_id])
さて、私のEventsCreator
モデルでは、私が上から@team
にアクセスしたい:私は得ることのコードで
class EventsCreator
# ...
def team_name
name = @team.name
# ...
end
# ...
end
を次のエラー:
undefined method `name' for nil:NilClass
モデルからこのようなインスタンス変数にどのようにアクセスする必要がありますか?そうするためには、よりよい方法やより良い習慣がありますか?
編集1:
event.rb
モデルは、データベースに保存される共通情報を含むモデルである:
class Event < ApplicationRecord
belongs_to :team
attr_accessor :comment
...
end
events_creator.rb
モデルでの拡張の一種でありますevent.rb
。それはいくつかのロジックを含む。繰り返しイベントの場合:
class EventsCreator
include ActiveModel::Model
attr_accessor :beginning, :ending, :repeat_frequency, :repeat_until_date
...
end
EventsCreator
は、DBにレコードを直接作成しません。これはちょうどいくつかのロジックを行い、Event
モデルを通してデータを保存します。
今、私はapplication_controller.rb
で定義されている@team
変数インスタンスにアクセスできるようにしたいteam.rb
に直接関係を持たずに:私はteam_id
を必要とするので
class ApplicationController < ApplicationController::Base
before_action :set_team_for_nested
private
def set_team_for_nested
@team = Team.find(params[:team_id])
end
end
マイroutes.rb
ファイルがteam
内のすべてのルートをネストさをすべてのアクションのために:
Rails.application.routes.draw do
resources :teams do
resources :events
get '/events_creator', to: 'events_creator#new', as: 'new_events_creator'
post '/events_creator', to: 'events_creator#create', as: 'create_events_creator'
end
end
今私は(これはI @team
インスタンス変数にアクセスする方法を見当がつかない思考はモデル全体からアプリケーション全体に対して定義されています)。私はRailsにとっては初めてのことなので、何かを混乱させるかもしれません。同じことを達成するより良い方法があるかどうか教えてください。
class EventCreator
...
def team_name
name #will return name of class instance
#or do something with it
end
end
を行うことができます
ActiveModel::Model
を含めた上で計画している場合あなたは、例えば、EventCreatorの初期化子でそれを渡すことができます。 'event_creator = EventCreator.new(@team)' –私はあなたの問題に適合しないので、私の答えを削除しました。私は今、@patkoperwasと同じことを提案します。 – Chris