Rails :: Как добавить атрибуты в модель перед отправкой в ​​представление - PullRequest
0 голосов
/ 22 октября 2011

ради любви к Богу, это не работает:

def index
    @events = Event.all
    @events.map { |e| e[:user_subscribed] = '55555' }

    @events.each do |e|
      puts e.name
      puts e[:user_subscribed] # nil !
    end
end

Я пробовал e[:user_subscribed] и e.user_subscribed, и это просто не работает.

Как мне добавить атрибуты в @events (мне не нужно их сохранять)?

update: Я в основном беру события из базы данных и добавляю атрибут на основе current_user перед отправкой их в представление. Следующие строки кода:

respond_to do |format|
  format.html # index.html.erb
end

Ответы [ 2 ]

2 голосов
/ 23 октября 2011

Если user_subscribed является виртуальным атрибутом в модели Event, вы должны установить / получить его, используя обычный установщик / получатель, а не установщик / получатель массива.

def index
  @events = Event.all
  @events.each { |e| e.user_subscribed = '55555' }
  @events.each do |e|
    puts e.name
    puts e.user_subscribed
  end
end
1 голос
/ 22 октября 2011

Вам нужно сохранить событие после его изменения:

@events = Event.all.each do |e|
  e.user_subscribed = '55555'
  e.save!
end

Редактировать : Большая часть логики, вообще говоря, должна быть помещена в модель, где это возможно ( Жир)Модель, Тощий контроллер ).Таким образом, вы должны сделать что-то вроде этого:

class Event < ActiveRecord::Base
  def something_based_on_the_current_user(user)
    #some logic here
  end
end

вызвать его в представлении (или контроллере) следующим образом:

@event.something_based_on_current_user(@user)
...