タイトル通りですがrailsでユーザー同士のメッセージ機能の実装に関してです。
モデルは
- userモデル
- roomモデル
- messageモデル
の3つで対応しようと考えています。
###userモデルのカラム
- id
- password
- nickname
user.rb
ruby
1class User < ActiveRecord::Base 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :trackable, :validatable 6 has_one :profile 7 has_many :messages 8 acts_as_followable # フォロワー機能 9 acts_as_follower # フォロー機能 10end
###roomモデルのカラム
- id
- user_id
- second_user_id
のカラムがあります。
user_idが送信した人で
second_user_idが受信した人
にしようと思っています。
room.rb
ruby
1class Room < ActiveRecord::Base 2 belongs_to :user 3 belongs_to :second_user, class_name: 'User' 4 has_many :messages 5end
###messageモデルのカラム
- id
- text
- room_id
- user_id
があります。
message.rb
ruby
1class Message < ActiveRecord::Base 2 belongs_to :room 3 belongs_to :user 4end
####user/show.html.erb
ruby
1 <h3>メッセージを送る</h3> 2 <%= form_tag('/messages', method: :post,) do %> 3 <div class="form-group"> 4 <textarea class="form-control" rows="5" name="text"></textarea> 5 </div> 6 <button type="submit" class="btn btn-primary btn-lg btn-block">送信</button> 7 <% end %>
submitをクリックすると・・・
roomが新しく作成されて送信者のIDと受信者のIDがroomsテーブルに追加されるようにしたい。
messagesテーブルにtextとroom_idとuser_idが追加されるようにしたい。
####controller/messages_controller.rb
ruby
1 def create 2 #以下はルームモデルに追加する 3 @user = User.find(params[:id]) 4 binding.pry 5 room = Room.new(user_id: current_user.id,second_user_id: user.id ) 6 room.save 7 #以下はメッセージモデルに追加する 8 Message.create(text: message_params[:text],user_id: current_user.id,room_id: room.id) 9 redirect_to user_path(current_user.id) 10 end 11 12 private 13 def message_params 14 params.permit(:text) 15 end 16
####routes.rb
ruby
1 Rails.application.routes.draw do 2 #devise_for :users 3 devise_for :users do 4 member do 5 get :follow 6 get :unfollow 7 end 8 end 9 root 'homes#index' #root_path 10 get 'flow' => 'flows#index' 11 resources :messages 12 resources :profiles 13 resources :rooms 14 resources :users do 15 member do 16 put :follow 17 put :unfollow 18 end 19 end 20 end
上記の内容で登録[submit]すると下記のようなエラーが出ます。
受信した側のID(second_user_id)が取得できていないのですが
どのようにして取得すればよろしいでしょうか?
ご指摘・ご教授お願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/25 05:54 編集
2017/04/25 06:09
2017/04/25 06:45
2017/04/25 06:57
2017/04/25 06:58
2017/04/25 07:15
2017/04/25 07:31
2017/04/25 12:00 編集
2017/04/25 13:46 編集
2017/04/27 07:31