设计用户和消息

时间:2015-11-24 14:30:33

标签: ruby-on-rails database ruby-on-rails-4 devise

我正在尝试使用用户和消息创建一个测试rails应用。我想要用户和消息之间的一对多关系(用户可以有很多消息)。我已经设计用于创建用户并且它可以工作(YAY!)和简单的消息模型。我补充说:

class Message < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  has_many :messages, dependent: :destroy
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  attr_accessor :email
end

这是我认为会做的关系。如何存储用户是否正在创建我正在创建的消息?以及如何访问它?我尝试在用户表中添加一个列,每次登录用户尝试发送消息时,我都会使用该消息提交当前用户ID。我不确定这是否安全,而且不太可靠。这样做的最佳/最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

用户模型: -

has_many :messages, dependent: :destroy
accepts_nested_attributes_for :messages   

您可以通过以下方式创建current_user的消息: -

# User Controller:    
before_action :authenticate_user!

def new
    current_user.messages.build
end

def create
    if current_user.update_attributes(user_params)
        redirect_to success_path
    else
        render :new
    end
end

private

def user_params
    params.require(:user).permit(:messages_attributes => [:id, :name])
end

可以访问当前用户的消息: -

@messages = current_user.messages

答案 1 :(得分:1)

为用户

创建消息
user = User.first
user.messages.create(message_params)

访问用户消息

messages = user.messages

在用户登录

后执行某些操作
class User < ActiveRecord::Base
  after_database_authentication do
     # do something
  end
end

消息表单

= simple_form_for current_user.messages.new do |form|
  = form.input :body
  = form.hidden_field :user_id, value: current_user.id
  = form.submit 'Leave Message.'

消息控制器#create

def create
  message = Message.new(message_params)
  if message.save!
    redirect_to :back, notice: 'New message created.'
  else
    redirect_to :back, notice: message.error.join(', ')
  end

private

  def message_params
    params.require(:message).permit(:body, :user_id)
  end
end