ruby on rails 4

时间:2016-05-29 17:40:03

标签: ruby-on-rails-4

我有一个用户模型和一个朋友模型(朋友继承自用户类)。用户通过友谊联接模型拥有许多朋友。

用户还可以创建消息并将其发送给他们的朋友。我希望能够跟踪哪些消息发送给哪些朋友。 所以我创建了一个消息模型,它与友谊模型相结合,创建了相关的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; 不知道如何纠正这个。

1 个答案:

答案 0 :(得分:0)

您正在尝试在创建@message时传递friendships_id,但数据库中的messages表中没有friendships_id列,这导致了“unknown attribute:friendships_id”的错误。

除此之外,您的关联和迁移也会出现一些错误。

  1. has_many :sent_messagess应为has_many :sent_messages

  2. 更改'sent_messages'表格,将'friendships_id'列更改为'friendship_id'