Структура приложения Rails - PullRequest
       0

Структура приложения Rails

0 голосов
/ 10 апреля 2011

Я работаю над приложением Rails и вроде как новичок в MVC и REST.Я пытаюсь использовать эти методологии, но у меня есть пара вопросов:

  1. Мне нужны навигационные ссылки, которые не соответствуют непосредственно «ресурсу».Допустим, это «Панель инструментов», «Транзакции» и «Балансы».Как мне смоделировать это в контроллере?У меня просто есть контроллер для «Навигации», который имеет три действия, по одному для каждого из слов выше?
  2. Если это разумный способ для моделирования приложения, я решил, что я сделаю маршруты соответствия, которые говорят / dashboard => Navigation # Dashboard, так как я не хотел бы выставлять слово "Navigation" в URL,Это кажется хорошим, но затем на сервере, когда я выполняю «инструментальную панель рендеринга», URL-адрес говорит «навигация / информационная панель», а не просто «информационная панель», поскольку я вызывал ее напрямую.Единственное, что я нашел, - это перенаправление на '/ dashboard', но это кажется неправильным.

Спасибо!

Редактировать: Реальный вопрос в том, что когда кто-то идет к "Войдите в систему ", и есть ошибка проверки, я хочу показать ошибку и отобразить сеансы # new (это страница входа в систему).Это заставляет браузер перейти в / session / new, но я хочу, чтобы он пошел в / signin.Я хочу избегать использования redirect_to, так как это заставит браузер выполнить весь запрос второй страницы, который не выглядит «правильным».

#routes.rb  
match '/signin', :to => "sessions#new", :as => :signin

#sessions_controller.rb  

def create
    @title = "Sign In"
    user = User.authenticate(params[:session][:email], params[:session][:password])

    if user.nil?
        flash[:error] = "Invalid email/password combination."
        #I want to use render 'new', but that changes the URI in the browser to sessions/new, whereas I want to maintain /signin without redirecting

        redirect_to signin_path
    else
        sign_in user
        redirect_to dashboard_path
    end    
end

Ответы [ 4 ]

3 голосов
/ 10 апреля 2011

Что касается первой части вопроса, я часто оказываюсь в положении, когда существуют «полезные» функции сайта, которые плохо отображаются на ресурсах.Обычно я втыкаю их в какой-то служебный контроллер.Вы можете попробовать DashboardController и определить методы navigation, balances, transactions и т. Д.

Для второй части вы попытались:

match '/dashboard' => 'navigation#dashboard'

Это должно работатьза то, что вы описываете.Если вы еще этого не сделали, вам следует прочитать Руководство по Rails по маршрутизации: http://guides.rubyonrails.org/routing.html.

1 голос
/ 11 апреля 2011

Хорошо использовать контроллер навигации.В ваших маршрутах вы можете определить собственные имена для него.

#routes.rb

match "/dashboard" => "navigation#dashboard", :as => "dashboard"

Вы получите dashboard_path, определив :as => "dashboard"

Обновление

Вы не можете сделать render dashboard_path.Вы можете сделать render 'dashboard', если вы находитесь в NavigationController, в противном случае вы также должны указать папку render 'navigation/dashboard'

В ваших представлениях должна быть папка с именем navigation с шаблоном с именем dashboard.

В вашем NavigationController:

class NavigationController < ApplicationController
  def dashboard
    ...
  end
end

Чтобы использовать ссылку: <%= link_to 'Dashboard', dashboard_path %> Надеюсь, что это ответ на ваш вопрос.

Обновление 2

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

0 голосов
/ 11 апреля 2011

, когда я реализую панель мониторинга, я использую DashboardController, а index - это просто панель инструментов.Я также обычно определяю HomeController, где живет домашняя страница (home#index, а также страницу about, страницу обратной связи, ...).

0 голосов
/ 10 апреля 2011

1 - Мне не совсем понятно, о чем вы спрашиваете. Но если я правильно понял ваш вопрос, для

должно быть 3 ресурса (контроллера)

1 - Панель управления

2 - Транзакции

3 - Балансы

и там у контроллеров может быть только действие show

2 - для этого вы можете использовать именованный маршрут (http://guides.rubyonrails.org/routing.html) Пример: match 'Navigation' => 'Dashboard#show'

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...