2012-04-22 2 views
0

им пытаются создать простую систему личных сообщенийрельсов, как извлечь: идентификатор атрибут в контроллере

У меня есть вложенный прокладывай

resources :users do 
    resources :messages 
end 

на моих пользователях показать страницу, у меня есть ...

<%= form_for([current_user, @message]) do |f| %> 
     <div class="field"> 
     <%= f.text_area :content, placeholder: "Send a private message..." %> 
     </div> 
     <%= f.submit "Post", class: "btn btn-large btn-primary" %> 
    <% end %> 

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

на моем message.rb я есть ...

belongs_to :user 

и user.rb я есть ...

has_many :messages 

на моих контроллерах пользователя показать действие У меня есть

def show 
@user = User.find(params[:id]) 
@microposts = @user.microposts.paginate(page: params[:page]) 
if user_signed_in? 
    @message = current_user.messages.build(params[:messages]) 
end 

end 

Когда пользователь нажимает кнопку отправки на моем шаблоне отображения, он переходит к моим сообщениям, создавая действие, однако им не удается получить идентификатор пользователя я смотрел (или пытаюсь отправить)

я распечатал свое переменное сообщение, и он говорит ...

[#<Message id: nil, content: nil, user_id: 1, to_id: nil, created_at: nil, updated_at: nil>] 

: user_id является текущим пользователем (который я, с идентификатором из 1), однако я не могу получить to_id (который был пользователем, на который я только что посмотрел, скажем, его идентификатор был 2)

может кто-нибудь рассказать мне, как я могу его получить? я могу думать только о передаче идентификатора как скрытого поля, но я слышал, что это небезопасно.

справка была бы принята с благодарностью. благодаря

обновление: @ Андрей

хмм на самом деле его интересно, потому что если я делаю ...

@message = current_user.messages.build(to_id: @user.id) 

и я прохожу в

<%= f.hidden_field :to_id, :value => @user.id %> 

я получаю

Can't mass-assign protected attributes: to_id. 

кто-нибудь знаю, почему?

ответ

1

Нет ничего плохого в том, чтобы помещать UserID в скрытое поле, оно видно в URL-адресе для начала.

Если добавить to_id в вашем шоу действий и иметь скрытое поле на том, что в вашей форме она будет вытекать из users#show действий в форму сообщения, а затем в messages#create действия, когда эта форма размещена.

def show 
@user = User.find(params[:id]) 
@microposts = @user.microposts.paginate(page: params[:page]) 
if user_signed_in? 
    @message = current_user.messages.build(to_id: @user.id) 
end 

end 

Обратите внимание, что показ действия не получает Params [: сообщения], потому что вы не размещаете на это. Если ваш URL-адрес выглядит так: users/1?messages=foo, то это значение параметра всегда будет равно нулю.

+0

хм это плохо сделать: to_id attr_accessible then? – Sasha

+0

wait nvm. Мне действительно не нужно делать это attri_accessible. Я не уверен, почему я должен был это сделать раньше. у меня должно быть что-то не так. Большое спасибо за Вашу помощь! – Sasha

1

На вашей странице показа введите скрытое поле.

<%= form_for([current_user, @message]) do |form| %> 
    <%= form.hidden_field :to_id, :value => @user.id %> 
+0

Хм это плохо сделать: to_id attr_accessible then? – Sasha

+0

wait nvm. Мне действительно не нужно делать это attri_accessible. Я не уверен, почему я должен был это сделать раньше. у меня должно быть что-то не так. Большое спасибо за Вашу помощь! – Sasha

Смежные вопросы