Railsの規則「Skinny Controllers Fat Models」があり、それに従おうとしました。これまでのコントローラーでは:
def create
@message = Message.new(message_params)
@message.sender_username = @current_user.username
@message.sender_model = @current_user.class.to_s
@message.sender_id = @current_user.id
if @message.sender_model == "Department"
@current_user.update_column(:gelesen, @current_user.employees.map { |s| "#{s.username}" }.join(','))
else
@current_user.update_column(:gelesen, @message.recipient_username)
end
....
だから今、私はこのコードのいくつかを私のモデルに移そうとしました(私はいくつかのことを試しましたが、ここに1つの試みがあります:)
class Message < ActiveRecord::Base
before_save :set_sender, :add_gelesen
def set_sender
sender_username = @current_user.username
sender_model = @current_user.class.to_s
sender_id = @current_user.id
end
def add_gelesen
if @message.sender_model == "Department"
@current_user.update_column(:gelesen, @current_user.employees.map { |s| "#{s.username}" }.join(','))
else
@current_user.update_column(:gelesen, @message.recipient_username)
end
end
end
そして、私はエラーが発生します:
undefined method `username' for nil:NilClass
それで、私は何を間違えましたか?