2013-11-01 2 views
0

В настоящее время я создаю приложение с 3 основными ресурсами: :products, :contacts, :items. Все они могут быть доступны посетителям только на общедоступных методах RESTful, таких как index и show.Rails избегать повторяющихся контроллеров (DRY)

С другой стороны, зарегистрированные пользователи могут иметь доступ к любым действиям RESTFul. Проблема в том, что представления для index и show различаются в зависимости от посетителей или пользователей.

Моя проблема в том, что на самом деле я думаю о дублировании моих контроллеров в пространстве имен user, относящемся только к зарегистрированному пользователю. Я знаю, что это не очень хорошая идея, так как это не СУХОЙ.

Как мне сделать, чтобы один контроллер мог достичь этого? Или какие у него лучшие методы?

Большое спасибо

+0

Я бы посоветовал разработать: http://stackoverflow.com/questions/4769402/devise-action-filter-for-actions-that-require-authentication. Не могли бы вы рассказать об этом: «Проблема в том, что взгляды на индекс и шоу различаются в зависимости от посетителей или пользователей». Каким образом эти действия будут отличаться? –

+0

u может сделать ур контент условным, означает, что если пользователь зарегистрировался, тогда отобразите этот контент, и если он не зарегистрирован, просто покажите только этот контент ... так что его простое связывание ur с условиями на одном и том же представлении (страница). –

ответ

0

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

<% if logged_in %> 
    <p>You are logged in!</p> 
<% else %> 
    <p>You're not logged in.</p> 
<% end %> 

Если различия являются основными вы, вероятно, захотите создать два отдельных представления (например /contacts/index.html.erb и /contacts/public_index.html.erb), один для зарегистрированных пользователей и один для не вошли, а затем поместить логику в контроллере:

def index 

    ... your logic goes here 

    if logged_in 
    render 'index' 
    else 
    render 'public_index' 
    end 
end 

Очевидно, что ваша реализация будет отличаться в зависимости от того, как реализована ваша система входа в систему, но это ее суть.

PS Вторые рекомендации выше, что вы используете Devise вместо того, чтобы пытаться свернуть свою систему входа в систему.

Смежные вопросы