我正在尝试使用用户和消息创建一个测试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。我不确定这是否安全,而且不太可靠。这样做的最佳/最简单方法是什么?
答案 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.'
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