2013-04-25 2 views
0

У меня есть табличный тест с полями «user_id» и «post_id». user_id Я извлекаю current_user.id и post_id из таблицы сообщений. Для этого я делаю: В тестовом контроллере: -Получите идентификатор другой таблицы, рельсы

def create 
    @user = current_user 
    @test = Test.new(params[:test]) 
    @post = Post.find(params[:id]) 
    @test.post_id = @post.id 
    @test.user_id = @user.id 
respond_to do |format| 
    @test.save 
    format.html { redirect_to(:back, :notice => "successfull") } 
    else 
    format.html { render :action => "new" } 
    end 
end 

В моей модели я создаю ассоциации: -

В test.rb:

belongs_to :post 

В post.rb:

has_many :test 

Страница просмотра:

= form_for @test, :validate => true do |f| 
    .span 
    = f.text_field :email, :placeholder =>"Email Address" 
    .span 
    = f.label :name 
    = f.text_field :name 
    .span 
    = f.submit "Save" 

user_id сохранить должным образом, но для POST_ID он дает ошибку:

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id 

Как я могу решить эту проблему?

+0

Вы уверены, что вы должны получить доступ к 'create' метод только тогда, когда это логин, т.е. 'current_user' не должен быть nil – Salil

ответ

1

Вы действительно должны получить доступ к методу создания только в том случае, если вы входите в систему i.e. Current_user не должен быть nil.

Если вы получаете эту ошибку в create метод только тогда он должен быть на линии

@test.user_id = @user.id 

это потому, что @user равна нулю, и вы звоните .id на nil.

EDITED

Вам необходимо отправить post_id из вашей формы, при условии, что вы получаете пост объект в @post

Добавьте следующую строку ваш вид

= form_for @test, :validate => true do |f| 
    = hidden_field_tag "post_id", @post.id 

и обновления

@post = Post.find(params[:id]) 

с

@post = Post.find(params[:post_id]) 
+0

Привет, спасибо за ваш ответ. Существует проблема с current_user, потому что это действие используется только при входе пользователя в систему. Основная проблема заключается в том, что я не могу сэкономить post_id – Rajeev

+0

вы говорите, что '@ post' является' nil', но это не так, потому что 'find' метод в' @post = Post.find (params [: id]) 'будет выдавать ошибку, например' Невозможно найти сообщение с id ### ', поэтому просто проверьте, что ваш идентификатор является правильным, а также' current_user' должен 'not be nil' – Salil

+0

Извините, это сообщение отображается в браузере. [Не удалось найти сообщение без идентификатора] – Rajeev

1

Это стандартное сообщение в Rails, в котором говорится, что вы пытались вызвать .id по значению nil.

Я подозреваю, что ваш current_user является nil. Вы можете быть уверены, что с помощью raise current_user.inspect я думаю, который расскажет вам, что его ноль

Вы убедитесь, что вы вошли в систему, чтобы ваш current_user не ноль

+0

Привет @bilash, из-за того, что post_id не сохраняется в моей тестовой таблице, он не может получить идентификатор сообщения из таблицы post.there нет проблемы с current_user, так как пользователь регистрируется в ..Пожалуйста, если у вас есть идеи. Спасибо за ответ. – Rajeev

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