Как вы справляетесь с соглашениями о присвоении имен частям рельсов? - PullRequest
1 голос
/ 07 мая 2010

Например, у меня может быть что-то вроде:

<div>
  <%= f.label :some_field %><br/>
  <%= f.text_field :some_field %>
</div>

, который работает для редактирования и новых действий. У меня тоже будет такой как:

<div>
  <%=h some_field %>
</div>

для действия шоу. Таким образом, вы можете подумать, что все ваши партиалы находятся в одном каталоге, например shared или что-то в этом роде. Проблема, которую я вижу с этим, состоит в том, что оба из них могут вызвать конфликт, так как они по сути являются одним и тем же частичным, но для разных действий, поэтому я делаю:

<!-- for edit and new actions -->
<%= render "shared_edit/some_partial" ... %>

<!-- for show action -->
<%= render "shared_show/some_partial" ... %>

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

1 Ответ

4 голосов
/ 07 мая 2010

Когда я использую каталог shared, то внутри я помещаю название модели, и мои частичные имена имеют такие имена:

shared/person/_show.html.erb
shared/person/_form.html.erb

Если вы хотите, чтобы одна строка отображала форму или отображала частичное, тогда выможет добавить помощника:

def render_form_or_show(model)
  if edit? || new? 
    return render :partial => "shared/#{model}/form"
  elsif show?
    return render :partial => "shared/#{model}/show"
  end
  return ""
end

Если вы соблюдаете некоторые правила, например, помещаете свои партиалы в общий каталог, а затем в каталог модели, а затем всегда имеете _form для редактирования и нового и _show для показа действия, тогдабуду работать ;).Конечно, вам нужно определить edit? и т. Д. Методы:

# Application controller
def edit?
  params[:action] == 'edit'
end

Или, может быть, есть лучший способ получить имя действия:).

...