2016-05-29 19 views
0

私はユーザーモデルとフレンドモデルを持っています(フレンドはユーザークラスから継承しました)。ユーザーは、友情参加モデルを通じて多くの友人を持っています。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 

ここでは、私がメッセージを送信すると、私はエラー "不明な属性を:friendships_id" を取得スキーマ

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 

であるか わかりませんこれを修正する。

答えて

0

@messageの作成中にfriendships_idを渡そうとしていますが、あなたのデータベースのメッセージテーブルにfriendships_idという列がありません。このエラーは「unknown attribute:friendships_id」の原因です。

これ以外にも、関連付けや移行に間違いがあります。

  1. has_many :sent_messagess列を変更するにはあなたの 'sent_messages' テーブルを変更しhas_many :sent_messages

  2. あるべき働いていた 'friendship_id'

+0

に 'friendships_id'!ありがとうございました –

関連する問題