2010-01-08 3 views
3

На данный момент я стараюсь делать следующее:Rails: Ссылка на частичные?

Я создал несколько частичных элементов (например, _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> 

В моем routes.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 (потому что я сказал ему этот путь в routes.rb - я думаю), и я получаю сообщение об ошибке:

uninitialized constant UserController 

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

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

(кодированием

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

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

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

+0

Вы можете улучшить to_param с помощью встроенного параметрирования ActiveSupport. to_param затем становится: "# {id} - # {login.downcase.parameterize}" – Ben

ответ

6

Что касается соглашений Rails, то сама модель является единственной (Пользователь), но таблица (пользователи) и контроллер (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> 
Смежные вопросы