2011-05-21 127 views
1

我目前有一個簡單的應用程序,其中包括通過設計和消息模型進行用戶身份驗證(消息模型使用Jquery和Faye)。兩者都獨立工作,但我想添加一個user_id消息。將user_id添加到消息模型

我已經更新了架構和模型的關係,但我有麻煩輸入必要的代碼讓視圖和控制器輸入到數據庫的關係,同時保持jQuery的工作。我不確定最好的方法,但在這裏我試圖創建一個隱藏的字段,將拉動user_id,不知道這是甚至可能的。這裏是適用的代碼,任何幫助表示讚賞。

消息index.html.erb

<ul id="chat"> 
    <%= render @messages %> 
</ul> 

<%= form_for Message.new, :remote => true do |f| %> 
<div class="field"> 
<%= f.text_field :content %> 
</div> 
<div class="field"> 
<%= f.hidden_field :user_id %> 
</div> 
<div class="actions"> 
<%= f.submit "Send" %> 
</div> 
<% end %> 

create.js.erb的消息

<% broadcast "/messages" do %> 
$("#chat").append("<%= escape_javascript render(@user.message) %>"); 
<% end %> 
$("#new_message")[0].reset(); 

消息控制器

class MessagesController < ApplicationController 
    def index 
    if @authentications = current_user 
    @messages = Message.all 
    else 
    redirect_to authentications_url 
    flash[:notice] = "You need to sign in before answering questions" 
    end 
    end 

def create 
    @user = User.find(params[:user_id]) 
    @message = @user.message.create(params[:message]) 
end 
end 

我覺得你有你需要的一切,但如果沒有,請讓我知道,我會很樂意爲您提供。

謝謝大家。

回答

2

兩件事情來糾正,

1)使用用戶關聯來創建表格消息實例(如果登錄用戶創建一個消息可能CURRENT_USER)

<%= form_for user.messages.new, :remote => true do |f| %> #// assuming its has many association 

2)如果是的has_many關聯然後改變創建行動中的關聯

@message = @user.messages.create(params[:message]) 
+0

謝謝,所以爲1)我做它current_user.messages.new,因爲他們登錄和2)它has_many所以我做了這個改變。現在的問題是,消息沒有被提交,我得到一個'ActiveRecord :: RecordNotFound(無法找到沒有ID的用戶): app/controllers/messages_controller.rb:12:在'創建'錯誤服務器。 – Igrabes 2011-05-21 04:34:44

+0

這是因爲,params [:user_id]沒有使用params [:message] [:user_id]。或者你可以嘗試使用Message.create(params [:message])創建消息,這應該是有效的,因爲消息中有user_id – 2011-05-21 04:39:12

+0

Naren,謝謝你,夥計,你是男人! – Igrabes 2011-05-21 05:01:36