Сообщение об ошибке сообщает вам, что именно не так: current_user
не существует для объекта @requestable
, что бы это ни было.
current_user
, скорее всего, является функцией, унаследованной от ApplicationController
,или, по крайней мере, обычно там живет.Обычно он возвращает объект User в соответствии с текущим сеансом.Но это не встроенная часть Rails, поэтому нам нужно больше информации, если вы хотите, чтобы я углубился в детали.
@requestable
выглядит как экземпляр полиморфной модели, поэтому он не будет знатьтекущего сеанса.
Здесь происходит некоторая магия Rails, которая, я думаю, сбивает вас с толку.
И @requestable.request_threads
, и current_user.request_threads
являются сгенерированными вспомогательными функциямиRails на этих объектах, чтобы сэкономить ваше время, фильтруя результаты и автоматически заполняя значения.
Я думаю, что с помощью кода, который вы нам показали, вы пытаетесь связать current_user
с новым request_thread
вы создаете.В этом случае вы можете просто объединить это в атрибуты вручную.Поскольку я не знаю, как выглядят ваши модели, я могу только догадываться по именам полей:
@request_thread = @requestable.request_threads.new( params[:request_thread].merge(:user => current_user) )
Как я уже говорил, функции с цепочкой предназначены только для удобства.Например, вы могли бы написать это так:
@request_thread = request_thread.new(params[:request_thread])
@request_thread.requestable = find_requestable
@request_thread.user = current_user