Вы, кажется, спрашиваете пару разных вещей. Если вы хотите условно визуализировать поле, то есть поле вообще не отображается, если @project не определено, сделайте следующее:
<%= f.hidden_field(:project_id, :value => @project.id) if @project %>
Если вы хотите, чтобы значение было пустым, когда нет проекта, вы можете немного урезать условное выражение предыдущего ответа:
<%= f.hidden_field (:project_id, :value => @project ? @project.id : '') %>
Нет необходимости проверять, что @project
определено и не равно nil, поскольку это глобальная переменная, и ее непосредственный вызов не вызовет ошибку "no method".