我已經在我的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
不直接在數據庫中創建記錄。它只是執行一些邏輯並通過Event
模型保存數據。
現在不具有直接關係到team.rb
我希望能夠訪問變量@team
的實例,它是在application_controller.rb
定義:
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
所有路線,因爲我需要的team_id
對於每一個動作:
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
現在我不知道如何訪問@team
實例變量(我思想是爲整個應用程序定義的)。由於我對Rails很陌生,因此可能會搞砸了一些事情,請告訴我是否有更好的方法來實現這一點。
可以,例如,通過它在EventCreator的初始化。 'event_creator = EventCreator.new(@team)' –
我刪除了我的答案,因爲它不適合你的問題。我現在建議像@patkoperwas一樣。 – Chris