我有一个用户模型和一个朋友模型(朋友继承自用户类)。用户通过友谊联接模型拥有许多朋友。
用户还可以创建消息并将其发送给他们的朋友。我希望能够跟踪哪些消息发送给哪些朋友。 所以我创建了一个消息模型,它与友谊模型相结合,创建了相关的sent_messages模型。
class User < ActiveRecord::Base
has_many :friendships
has_many :friends, :through => :friendships
has_many :messages
end
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => 'User'
has_many :sent_messages
has_many :messages, :through => :sent_messages
end
class Message < ActiveRecord::Base
belongs_to :user
has_many :sent_messagess
has_many :friendships, :through => :sent_messages
end
class SentMessage < ActiveRecord::Base
belongs_to :message
belongs_to :friendship
end
在消息创建表单中,将有一个数据文本框和一个复选框,列出他们可以选择将消息发送到的用户的所有朋友。
<%= form_for @message, url: user_messages_path do |f| %>
<div class="form-group">
<%= f.text_field :title %>
</div>
<div class="form-group">
<%= f.text_area :message %>
</div>
<% Friendship.all.each do |friendship| -%>
<div>
<%= check_box_tag('message[friendships_id][]',friendship.id,@message.friendships.include?(friendship.id))%>
<%= label_tag friendship.friend_username %>
</div>
<% end -%>
<div class="actions">
<%= f.submit "Send", class: 'btn btn-primary' %>
</div>
<% end %>
这是消息控制器
class MessagesController < ApplicationController
before_action :authenticate_user!
def create
@message = Message.new(message_params)
if @message.save
redirect_to action: "show", id: @message.id
else
respond_to do |format|
format.html
format.js
end
end
end
private
def message_params
params.require(:message).permit(:title,:message,:friendships_id => [])
end
end
这是架构
create_table "messages", force: true do |t|
t.integer "user_id"
t.string "title"
t.text "message"
end
create_table "sent_messages", force: true do |t|
t.integer "message_id"
t.integer "friendships_id"
end
create_table "friendships", force: true do |t|
t.integer "user_id"
t.integer "friend_id"
t.string "friend_username"
end
当我提交消息时,我收到错误&#34; unknown属性:friendships_id&#34; 不知道如何纠正这个。
答案 0 :(得分:0)
您正在尝试在创建@message时传递friendships_id,但数据库中的messages表中没有friendships_id列,这导致了“unknown attribute:friendships_id”的错误。
除此之外,您的关联和迁移也会出现一些错误。
has_many :sent_messagess
应为has_many :sent_messages
更改'sent_messages'表格,将'friendships_id'列更改为'friendship_id'