我正在使用Active Record构建一个sinatra应用。这个想法实际上是要有一个自定义的电子邮件应用程序。这里有用户和消息模型。 User has_many :messages
和Message belongs_to :user
。这可能是我遇到的问题。我也为Message belongs_to :user
和has_many :users
设置了它。
这是模型
现在,当我在动作控制器中创建消息时,我试图使用shove方法将新消息放入用户的message数组中。如果我尝试一次与多个用户“共享”此消息,并且所有用户ID都位于params( @user = User.find(id)
中,然后user.messages << @new_message)
,则最后一个用户会将消息存储在它的.messages数组中。但是,只有最后一个要迭代。
class Message < ActiveRecord::Base
belongs_to :user
has_many :users
end
class User < ActiveRecord::Base
validates :username, presence: true, uniqueness: true
has_secure_password
has_many :messages
end
想法是作者“拥有”消息,但可以与许多用户共享。这是表格
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :username
t.string :email
t.string :password_digest
end
end
end
class CreateMessages < ActiveRecord::Migration
def change
create_table :messages do |t|
t.string :message
t.string :author
t.integer :user_id
t.integer :user_ids
t.integer :share_id
t.string :title
t.timestamps
end
end
end
# action controller
new_params = {}
new_params[:message] = params["message"]
new_params[:title] = params["title"]
new_params[:author] = params["author"]
new_params[:user_id] = params["user_id"]
@message = Message.create(new_params)
# @share = Share.create
# @message.share_id = @share.id
response.map do |x|
x.messages << @message
x.save!
end
@all = User.all
@user = User.find_by(username: @message.author)
erb :"/user/sent"
我相当确定这是因为我的关联设置不正确。
答案 0 :(得分:0)
您需要在用户和消息之间具有“一对多”的关系,才能实现与多个用户共享多条消息。创建其他记录,例如MessageShare
并从两方面都做很多事情:
class MessageShare < ActiveRecord::Base
belongs_to :user
belongs_to :message
end
class Message < ActiveRecord::Base
has_many :message_shares
end
class User < ActiveRecord::Base
has_many :message_shares
end
message_shares
表应具有user_id
和message_id
整数列。