Сообщения между пользователями - PullRequest
1 голос
/ 24 мая 2009

У меня есть тело: текстовое содержимое: текст sender_id: целое число получатель_ид: целое число в таблице сообщений

У меня есть это в модели пользователя:

   has_many :sent_messages, :class_name => "Message", :foreign_key => "sender_id"
   has_many :received_messages, :class_name => "Message", :foreign_key => "receiver_id"

У меня есть это в модели сообщения:

   belongs_to :sender, :class_name=>"User", :foreign_key=>"sender_id"
   belongs_to :receiver, :class_name=>"User", :foreign_key=>"receiver_id"

После входа в систему при просмотре профиля другого пользователя (я имею в виду эту ссылку в представлении пользователя).

Я вызываю новое сообщение так:

  <%= link_to "Send a Message",{:controller=>"messages",:action=>"new"}%>

У меня есть эти коды в messages_controller:

 def new
  @message = current_user.sent_messages.build
   end

def create
@message = current_user.sent_messages.build(params[:message])
  if @message.save
  flash[:notice] = "Successfully created message."
  redirect_to root_url
else
  render :action => 'new'
 end
 end
#.....

Также у меня есть эти коды в views \ messages \ new.html.erb

 <% form_for @message do |f| %>
 <%= f.error_messages %>
  <p>
 <%= f.label :body %><br />
 <%= f.text_field :body %>
  </p>
  <p>
 <%= f.label :content %><br />
 <%= f.text_area :content %>
  </p>
 <p><%= f.submit "Submit" %></p>
  <% end %>

После нажатия на ссылку я заполняю текст и текст, затем отправляю. Все сохранено, но значение receive_id равно нулю. Я пытался сделать много вещей, но не смог сохранить receive_id

Например: я установил ссылку так:

  <%= link_to "Send a Message",{:controller=>"messages",:action=>"new",
   :receiver_id=>@user.id}%>

Он отправляет нужный мне идентификатор пользователя, и я могу получить это значение с помощью params, но проблема в том, что я не смог найти способ сохранить это значение в базе данных при сохранении остальных.

Ответы [ 3 ]

0 голосов
/ 25 мая 2009

Lol Я обнаружил, что я вызываю новое сообщение, как я упоминал ранее

 <%= link_to "Send a Message",{:controller=>"messages",:action=>"new",
 :receiver_id=>@user}%>

тогда новый метод будет таким же, как в модели сообщения

 def new
 @message =current_user.sent_messages.build(:receiver_id=>params[:receiver_id])
  end

И самое простое (на самом деле это большая проблема для меня :)) в views / messages / new.html.erb добавить эту строку в form_for

 <%= f.hidden_field :receiver_id  %>
0 голосов
/ 06 июня 2009

1001 * попробовать *

class MessagesController
   def new
     @message = current_user.sent_messages.build :receiver_id => params[:receiver_id]
   end    
end

лично мне нравится использовать вложенные маршруты в URL, вот так

домена / пользователи / 123 / сообщения / новый

тогда вы можете сделать

link_to "Send a message", new_user_message( @user )

так ваш контроллер скажет

class MessagesController
   def new
     @message = current_user.sent_messages.build :receiver_id => params[:user_id]
   end    
end
0 голосов
/ 24 мая 2009

Передача receiver_id в параметрах просто дает доступ к методу new. Вам нужно будет получить доступ и хранить params[:receiver_id] где-нибудь в вашем new методе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...