Как мне показать только ссылку на один частичный из двух? - PullRequest
0 голосов
/ 03 января 2012

Ладно, у меня есть частичная форма рельсов, к которой обращаются 2 вида, новое и редактировать действие, но мне нужно только показать ссылку в форме редактирования, когда я пытаюсь использовать этот подход

новая форма

 = render :partial => 'form', :locals => {:f => f}

редактировать форму

= render :partial => 'form', :locals => {:f => f, :show_link => true}

форма частичная

if defined? show_link

Есть ли лучший способ для достижения этого или стандартный путь рельсов, который является лучшим подходом

Ответы [ 4 ]

1 голос
/ 03 января 2012

Я обычно делаю что-то вроде

if @record.new_record?
  # render 'new' partial
else
  # render 'edit' partial
end

, чтобы различать new и edit конкретные вещи в моих рельсовых формах

1 голос
/ 03 января 2012

То, как я видел это раньше, использует new_record и persisted, которые противоположны друг другу. persisted для сохраненных записей, new_record для несохраненных.

Я собираюсь угадать сценарий здесь, но это что-то вроде «показать ссылку для удаления на странице редактирования»?

Если это так, я бы сделал что-то вроде этого (предполагая, что @object является объектом для формы):

(новая и редактируемая форма)

= render 'form'

(частичная форма)

- if object.persisted?
  = link_to 'Delete', @object, :method => :delete

(примеры в хамле, но при необходимости их легко конвертировать в erb)

1 голос
/ 03 января 2012

вам даже не нужно передавать parameter show_link от редактирования, вы можете detect the action в form view.

в обоих местах, которые вы можете использовать

<%= render :partial => 'form', :locals => {:f => f} %>

, и вform partial вы можете сделать это как

<%= (link_to ........ ) if params[:action] == "edit" %>

, если ссылка является HTML-тегом, вы можете сделать это как

<% if params[:action] == "edit" %>
<a href="...">click me to edit</a>
<% end %>

Так что теперь он проверит, произошло ли render из1017 * действие, будет добавлено link.

1 голос
/ 03 января 2012

Если это ссылка, а не элемент формы, обычно лучше использовать вложенные рендеры.Другими словами, у вас есть 3 файла: new.html, edit.html и _form.htmlnew.html, и edit.html отображают _form.html, а edit.html включает дополнительную ссылку.Вы можете настроить стиль элемента ссылки так, чтобы он отображался в другом месте, если вам нужно.

Если важно, чтобы ссылка более элегантно перетекла в форму, рассмотрите возможность использования content_for и yield, чтобы в edit.html входили:

content_for :extras do
    # link here
end

И _form.html включает в себя yield :extras.

ПРИМЕЧАНИЕ. Я сознательно остановил расширения шаблонов, не зная, используете ли вы erb, haml и другие.

...