1

私は現在、デバイスとメッセージ モデル (メッセージ モデルは Jquery と Faye を使用) によるユーザー認証を含むシンプルなアプリを持っています。どちらも独立して正常に動作していますが、メッセージに user_id を追加したいと思います。

私はすでにスキーマとモデルをリレーションシップで更新しましたが、jquery の動作を維持しながら、ビューとコントローラーがリレーションシップを db に入力するために必要なコードを入力するのに問題があります。最善の方法はわかりませんでしたが、ここでは、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

必要なものはすべて揃っていると思いますが、そうでない場合はお知らせください。喜んで提供させていただきます。

みんな、ありがとう。

4

1 に答える 1

2

修正する2つのこと、

1)ユーザー関連付けを使用して、フォームでメッセージインスタンスを作成します(ログインユーザーがメッセージを作成する場合、おそらく current_user )

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

2) has_many アソシエーションの場合は、create アクションでアソシエーションを変更します

@message = @user.messages.create(params[:message])
于 2011-05-21T04:22:22.713 に答える