Перенаправить на другую страницу в рельсах - PullRequest
0 голосов
/ 09 мая 2011

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

if @entities.length==1
      redirect_to show_path(:id=>@entities[0].id)
    end

. Я ожидаю, что теперь новый сайт открывается как / show? Id = 1234, но этого не происходит.Вместо этого контроллер позади пути объекта загружает подробную информацию об объекте, но ничего не отображается.

Я получаю следующую ошибку:

ActionView::MissingTemplate (Missing template entities/show with {:formats=>[:js, :"*/*"], :handlers=>[:rjs, :rhtml, :rxml, :erb, :builder], :locale=>[:en, :en]} in view paths ..."):

Как загрузить нужную страницу, просто добавив show.js.erb в папку entity, ошибка исчезнет, ​​но проблема по-прежнемуостается, что страница показа не показывается.

РЕДАКТИРОВАТЬ:

 render :update do |page|
        page.redirect_to show_product_path(:id=>@entities[0].id)
      end

это работает, но почему?в чем разница?

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Я бы предложил переориентировать прямо на объект.Rails достаточно умен, чтобы создать маршрут для вашего объекта.

if @entities.length==1
  redirect_to @entities.first
end
0 голосов
/ 09 мая 2011

Я думаю

render :update do |page|
        page.redirect_to show_product_path(:id=>@entities[0].id)
end

код ищет действие шоу в том же контроллере, где

render :update do |page|
        page.redirect_to show_product_path(:id=>@entities[0].id)
 end

перенаправляет на продукты / шоу в контроллере продуктов. Я думаю, что у вас нет действия «show» в контроллере «entity», поэтому вы получаете

ActionView::MissingTemplate (Missing template entities/show with {:formats=>[:js, :"*/*"], :handlers=>[:rjs, :rhtml, :rxml, :erb, :builder], :locale=>[:en, :en]} in view paths ..."):

При стандартной конфигурации рельсов она работает следующим образом

в вашем контроллере

class EntitiesController < ApplicationController

  def index

    #will display all the products
    **#you need to have a index.erb.html file as well**
    @products = <Your product getting logic here>

  end

  def show
    #display only one product
    #you need to have a show.erb.html 
    @product = Product.find(params[:id])
  end
end

Так что в вашем случае вы должны перенаправить как

show_product_path с идентификатором

и убедитесь, что у вас есть действие show, определенное в контроллере

НТН

Sameera

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