Rails: ссылка на частичные? - PullRequest
       15

Rails: ссылка на частичные?

3 голосов
/ 08 января 2010

На данный момент я пытаюсь сделать следующее:

Я создал несколько партиалов (то есть _show_signature.html.erb) для своего пользователя. Теперь я хочу показать их при нажатии на ссылку. В моем пользовательском контроллере я создал новое действие:

  def show_signature
     @is_on_show_signature = true
  end

  def show_information
     @is_on_show_information = true
  end

на моем пользователе show.html.erb я закодировал это:

<% if @is_on_show_information %>
    <%= render :partial => 'show_information' %>
<% elsif @is_on_show_signature %>
    <%= render :partial => 'show_signature' %>
<% end %>

и в моей "навигационной панели" я написал:

  <ul>
    <li class="profile-tab">
      <%= link_to 'Information', show_information_path %>
    </li>
    <li class="profile-tab">
      <%= link_to 'Signature', show_signature_path %>
    </li>
  </ul>

В моем route.rb я написал:

  map.show_information '/user-information', :controller => 'user', :action => 'show_information'
  map.show_signature '/user-signature', :controller => 'user', :action => 'show_signature'

Теперь моя проблема:

щелчок по моей "информационной" ссылке перенаправит меня на http://localhost:3000/user-information (потому что я сказал ему этот путь в rout.rb - я думаю), и я получу ошибку:

uninitialized constant UserController

Но это не то, что я хочу ... Мой путь показа пользователя выглядит примерно так:

http://localhost:3000/users/2-loginname

(кодируя

  def to_param
     "#{id}-#{login.downcase.gsub(/[^[:alnum:]]/,'-')}".gsub(/-{2,}/,'-')
  end

в моей модели пользователя)

Я хочу добавить ссылку на что-то вроде http://localhost:3000/users/2-test/user-information. Есть идеи, как это будет работать? Есть идеи, почему я получаю эту ошибку?

1 Ответ

6 голосов
/ 08 января 2010

Что касается соглашений Rails, сама модель является единственной (User), но таблица (users) и controller (UsersController) оба являются множественными. Вначале это может вызвать значительную путаницу, и даже после многих лет работы с Rails я все еще совершаю ошибку, пытаясь сделать что-то вроде 'user = Users.first', что, конечно, неверно, как часто вы задумываетесь о именах таблиц вместо имен классов.

Кроме того, для переключения отображения элементов на странице вы, вероятно, захотите использовать метод link_to_remote, который использует AJAX для обновления вместо обновления страницы. Если у вас все в порядке с полным обновлением страницы, эти действия нужно будет перенаправить на что-то, например, на страницу реферера, или вы получите пустую страницу или ошибку, так как шаблон страницы не существует.

Как правило, вы делаете:

<ul>
  <li class="profile-tab">
    <%= link_to_remote 'Information', show_information_path %>
  </li>
  <li class="profile-tab">
    <%= link_to_remote 'Signature', show_signature_path %>
  </li>
</ul>

Тогда каждое действие будет таким, как вы указали, однако шаблон страницы show_information.rjs будет выглядеть так:

page.replace_html('extra_information', :partial => 'show_information')

Имейте в виду, что для получения частичного содержимого вам потребуется заполнитель, поэтому просто оберните необязательные разделы в элемент с определенным идентификатором:

<div id="extra_information">
  <% if @is_on_show_information %>
    <%= render :partial => 'show_information' %>
  <% elsif @is_on_show_signature %>
    <%= render :partial => 'show_signature' %>
  <% end %>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...