В моем приложении есть модель пользователя и модель поста, в которой пользователь has_many посты и посты принадлежат пользователям.Сообщения отображаются на странице профиля пользователя.Я бы хотел, чтобы любой пользователь мог публиковать сообщения самостоятельно или на странице профиля любого другого пользователя.Однако у меня проблема в том, что, хотя я знаю, кто публикует сообщение (current_user), я не знаю, чей профиль current_user включен.Мне нужно знать это, чтобы назначить новый пост постам этого пользователя.Как извлечь информацию об идентификаторе пользователя из просматриваемого в данный момент профиля, чтобы я знал, где назначить новое сообщение?
Мой контроллер микросообщений выглядит следующим образом:
class MicropostsController < ApplicationController
before_filter :authenticate_user!
def create
@user_of_page = User.find_by_name(params[:id])
@micropost = @user_of_page.microposts.build(params[:micropost])
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to :back
else
redirect_to about_path
end
end
def destroy
end
end
Но я получаюNoMethodError: неопределенный метод `microposts 'для nil: NilClass.Я предполагаю, что это потому, что я делаю некоторую ошибку с созданием переменной user_of_page, но я не знаю, что это такое!
РЕШЕНИЕ
Спасибо Сэм,Я воспользовался вашим советом и закончил тем, что сделал это так:
Я добавил столбец в свою таблицу Micropost, названный ow_to_id.
Затем я передал идентификатор пользователя, профиль которого отображается из представления пользователя, в контроллер микросообщений, используя скрытое поле в форме микросообщений, например:
<%= form_for @micropost do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
<%= f.label :content, "Why that mood?" %>
<%= f.text_area :content %>
</div>
<div class="field">
<%= f.hidden_field :author, :value => current_user.name %>
<%= f.hidden_field :belongs_to_id, :value => @user.id %>
<%= f.hidden_field :agree, :value => "0" %>
<%= f.hidden_field :disagree, :value => "0" %>
<%= f.hidden_field :amused, :value => "0" %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<% end %>
Затем я использовал это значение идентификатора, чтобы найти пользователя для назначения сообщения в контроллере микросообщений, например:
class MicropostsController < ApplicationController
before_filter :authenticate_user!
def create
@user_of_page = User.find(params[:micropost][:belongs_to_id])
@micropost = @user_of_page.microposts.build(params[:micropost])
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to :back
else
redirect_to about_path
end
end
def destroy
end
end
Магия!Еще раз спасибо, вы помогли мне увидеть это правильно.