J'ai défini une variable d'instance dans mon ApplicationController
comme ça:Comment accéder à une variable d'instance à partir d'un modèle Rails?
@team = Team.find(params[:team_id])
Maintenant, dans mon modèle EventsCreator
Je voudrais accéder @team
d'en haut:
class EventsCreator
# ...
def team_name
name = @team.name
# ...
end
# ...
end
Avec ce code, je reçois l'erreur suivante:
undefined method `name' for nil:NilClass
Comment dois-je accéder à des variables d'instance de ce type à partir d'un modèle? Y a-t-il une meilleure façon ou une meilleure pratique de le faire?
Edit 1:
Le modèle event.rb
est le modèle qui contient des informations communes qui sont également enregistrées dans la base de données:
class Event < ApplicationRecord
belongs_to :team
attr_accessor :comment
...
end
Le modèle events_creator.rb
est en quelque sorte une extension de event.rb
. Il contient une certaine logique, par ex. pour les événements récurrents:
class EventsCreator
include ActiveModel::Model
attr_accessor :beginning, :ending, :repeat_frequency, :repeat_until_date
...
end
EventsCreator
ne crée pas directement des enregistrements dans la base de données. Il fait juste une certaine logique et enregistre les données à travers le modèle Event
.
Maintenant, sans avoir une relation directe avec team.rb
Je veux être en mesure d'accéder à la variable d'instance @team
qui est défini dans 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
Mon fichier routes.rb
est nichait tous les itinéraires à l'intérieur team
parce que je besoin du team_id
pour chaque action:
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
maintenant, je ne sais pas comment accéder à la variable d'instance @team
(que je la pensée est définie pour l'ensemble de l'application) à partir d'un modèle. Depuis que je suis assez nouveau à Rails, je pourrais avoir foiré des choses, s'il vous plaît dites-moi s'il y a de meilleurs moyens d'atteindre la même chose.
Vous pouvez, par exemple, passer dans l'initialiseur de eventCreator. 'event_creator = EventCreator.new (@team)' –
J'ai supprimé ma réponse car elle ne correspond pas à votre problème. Je suggère maintenant la même chose que @patkoperwas. – Chris