Понятия не имею, почему парсер не распознает, что вы пытаетесь сделать.
Вместо того, чтобы пытаться отобразить все тонкости синтаксического анализатора ruby, почему бы не попытаться сделать код читабельным?
Самый простой способ - использовать оператор ||=
и перенести эту логику в контроллер.
Сравните расширенную форму вашего первого примера:
Controller:
Not Shown
View:
<%= form_for (
(@quiz_attempt.blank? ?
QuizAttempt.new(
:patient_id => current_user.id,
:started => Time.now.utc,
:step_quiz_id => @course_step.step.step_quiz.id) :
@quiz_attempt
),
:url => submit_quiz_course_course_step_path(@course_step.course, @course_step)
) do |f| %>
Кому:
Controller:
#... near the end of the relevant action
@quiz_attempt ||= QuizAttempt.new(:patient_id => current_user.id,
:started => Time.now.utc,
:step_quiz_id => @course_step.step.step_quiz.id)
View:
<%= form_for @quiz_attempt, :url =>
submit_quiz_course_course_step_path(@course_step.course, @course_step) do |f| %>
Таким образом, вы можете использовать стиль без паренов, не имея запутанных ?:
битов, забивающих все.
Надеюсь, это поможет.
* В качестве отступления вот:
Что я думаю не так
form_for()
не обязательно совпадает с form_for ()
, поэтому может возникнуть путаница относительно того, пытаетесь ли вы сказать
"вызов form_for
с результатом (@quiz_attempt, :url => url) #which is not valid syntax
"
или
"вызов form_for
с аргументами (@quiz_attempt, {:url => url}) #which is what the real arguments look like
.