Добавление user_id в модель сообщения - PullRequest
1 голос
/ 21 мая 2011

В настоящее время у меня есть простое приложение, которое включает аутентификацию пользователя через devise и модель сообщения (модель сообщения использует Jquery и Faye). Оба работают нормально независимо, но я хотел бы добавить 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

Я думаю, у вас есть все, что вам нужно, но если нет, дайте мне знать, и я буду рад предоставить это для вас.

Спасибо всем.

1 Ответ

2 голосов
/ 21 мая 2011

две вещи, чтобы исправить,

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])
...