rails 3 частичный рендеринг с параметрами

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

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

Для этого я использую параметры :sort_filter и :status_filter.

Мой исходный код находится здесь, но я хочу изменить его, чтобы отображать частичные фрагменты в link_to вместо того, как он указан здесь:

         <ul>
            <li><%= link_to "Active", work_orders_path(params.merge({:status_filter => "A", :sort_filter => params[:sort_filter]}))  %></li>
            <li><%= link_to "On Hold", work_orders_path(params.merge({:status_filter => "H", :sort_filter => params[:sort_filter]}))  %></li>
            <li><%= link_to "Completed", work_orders_path(params.merge({:status_filter => "C", :sort_filter => params[:sort_filter]}))  %></li>
            <li><%= link_to "Billed", work_orders_path(params.merge({:status_filter => "B", :sort_filter => params[:sort_filter]}))  %></li>
        <li><%= link_to "All", work_orders_path(params.merge({:status_filter => "E", :sort_filter => params[:sort_filter]})) %></li>
     </ul>

Поэтому вместо ссылки на индекс в моем work_orders_path я хотел бы сослаться на партиал под названием viewall. Нравится:

<%= link_to render (:partial => 'viewall', :status_filter => "E", :sort_filter => params[:sort_filter]) %>

Мне нужно иметь возможность передавать объединенные параметры с частичным, если это возможно. Я просмотрел всю документацию и вчера весь день гуглил, чтобы найти ответ на этот вопрос, и до сих пор ничего не нашел. Любая помощь будет оценена по достоинству.


person user1214966    schedule 22.03.2012    source источник


Ответы (1)


Синтаксис для передачи переменной @foo в партиал следующий:

render :partial => "partial", :locals => { :foo => @foo }

Затем он доступен в партиале как foo.

См. раздел 3.4.4 этого руководства.

EDIT: Начиная с Rails 3.?.? более краткая версия такова:

render "partial", foo: @foo
person Thilo    schedule 22.03.2012
comment
На самом деле я пробовал это, и он вообще не передал переменную. render(:partial =› viewall, :locals =› { :status_filter =› H }) — пробовал с символом () и без него. Также безуспешно пытаюсь заставить это работать с link_to. Не уверен, что это возможно или нет. - person user1214966; 22.03.2012
comment
Убедитесь, что вы обращаетесь к нему как status_filter в частичном, а не @status_filter или params[:status_filter] - person Thilo; 22.03.2012
comment
У меня есть общий вопрос, чтобы убедиться, что я делаю это правильно. Поражают ли частичные части контроллер перед их загрузкой? Я предполагаю, что они это делают (рендеринг), но если они этого не сделают, у меня возникнут проблемы, потому что мой контроллер использует эти параметры для выбора строк из моей таблицы заказов на работу на основе диапазонов дат и статусов. Мое намерение во всем этом состояло бы в том, чтобы заказы на работу отображались на разных вкладках в зависимости от того, в каком статусе они находятся. - person user1214966; 22.03.2012
comment
Контроллеры отображают представления, которые, в свою очередь, могут включать частичные представления. Руководство, на которое я ссылаюсь, является отличным введением в то, как все это сочетается друг с другом. - person Thilo; 22.03.2012
comment
также: render "partial", {:foo => @foo} - person tokland; 04.07.2012