2014-09-03 4 views
1

В моем представлении «Офис» отображаются продукты, найденные в базе данных продукта. В этом представлении отображается более одного продукта, поэтому я хочу, чтобы пользователи могли нажимать на офисный продукт, который переходит в представление «показать», в котором отображаются только эти детали продукта.Передача информации о товаре с одного взгляда на другой

Мой магазин контроллер выглядит следующим образом: -

class StoreController < ApplicationController 
    def index 
    @products = Product.all 
    end 

    def show 
    @products = Product.find_by(:id) 
    if @products.nil? 
     redirect_to action: :index 
    end 
    end 
end 

Код link_to в представлении офиса выглядит следующим образом: -

<p class="showArticle"><%= link_to 'Show Article', store_show_path %></p> 

Код продукта в представлении шоу выглядит следующим образом : -

<%= @products.title(:id) %> 

Офисные продукты отображаются должным образом в пределах офиса. При нажатии на продукты link_to браузер перенаправляет с помощью action: :index, так как @products.nil? оценивается как истинный.

Как я должен передавать эту информацию о продуктах в представление, чтобы увидеть детали продукта?

Ниже мой routes.rb файл: -

Easygifts::Application.routes.draw do 
    get "store/index" 
    get "store/writing" 
    get "store/office" 
    get "store/time" 
    get "store/home" 
    get "store/wellness" 
    get "store/travel" 
    get "store/bags" 
    get "store/leisure" 
    get "store/show" 
    resources :products 

    # The priority is based upon order of creation: first created -> highest priority. 
    # See how all your routes lay out with "rake routes". 

    # You can have the root of your site routed with "root" 
    root 'store#index', as: 'store' 

    # Example of regular route: 
    # get 'products/:id' => 'catalog#view' 

    # Example of named route that can be invoked with purchase_url(id: product.id) 
    # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase 

    # Example resource route (maps HTTP verbs to controller actions automatically): 
    # resources :products 

    # Example resource route with options: 
    # resources :products do 
    #  member do 
    #  get 'short' 
    #  post 'toggle' 
    #  end 
    # 
    #  collection do 
    #  get 'sold' 
    #  end 
    # end 

    # Example resource route with sub-resources: 
    # resources :products do 
    #  resources :comments, :sales 
    #  resource :seller 
    # end 

    # Example resource route with more complex sub-resources: 
    # resources :products do 
    #  resources :comments 
    #  resources :sales do 
    #  get 'recent', on: :collection 
    #  end 
    # end 

    # Example resource route with concerns: 
    # concern :toggleable do 
    #  post 'toggle' 
    # end 
    # resources :posts, concerns: :toggleable 
    # resources :photos, concerns: :toggleable 

    # Example resource route within a namespace: 
    # namespace :admin do 
    #  # Directs /admin/products/* to Admin::ProductsController 
    #  # (app/controllers/admin/products_controller.rb) 
    #  resources :products 
    # end 
end 

Ниже макет Применения: -

<!DOCTYPE html> 
<html> 
<head> 
    <title>Easy Gifts UK Ltd - Home of promotional gifts</title> 
    <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %> 
    <%= javascript_include_tag "application", "data-turbolinks-track" => true %> 
    <%= csrf_meta_tags %> 
</head> 
<body class='<%= controller.controller_name %>'> 
<div id="wrapper"> 

    <div id="branding"> 
    <%=link_to(image_tag("easyGiftsLogo.jpg", :width => "210", :height => "70", :alt => "Easy Gifts UK Logo"), store_path) %> 
     <div id="search2"> 
      <p>search field</p> 
     </div> 
    </div> 

    <div id="content"> 
     <%= yield %> 
    </div> 

    <div id="mainNav"> 
     <ul> 
      <li><%= link_to_unless_current('Writing', { action: 'writing' }) %></li> 
      <li><%= link_to_unless_current('Office', { action: 'office' }) %></li> 
      <li><%= link_to_unless_current('Time', { action: 'time'}) %></li> 
      <li><%= link_to_unless_current('Home', { action: 'home'}) %></li> 
      <li><%= link_to_unless_current('Wellness', {action: 'wellness'}) %></li> 
      <li><%= link_to_unless_current('Travel', {action: 'travel'}) %></li> 
      <li><%= link_to_unless_current('Bags', {action: 'bags'}) %></li> 
      <li><%= link_to_unless_current('Leisure', {action: 'leisure'}) %></li>   
     </ul> 
    </div> 
    <div id="footer"> 
     <ul> 
      <li><%= link_to 'Admin', products_path %></li> 
      <li><a href="#">link 2</a></li> 
      <li><a href="#">link 3</a></li> 
     </ul> 
    </div> 
</div> 
</body> 
</html> 

И следующий парциальный для 'Офиса': -

<%= image_tag("office (1).jpg", :class => "imgBorder", :width => "808", :height =>"228", :alt => "Office section - Easy Gifts UK Ltd") %> 
      <%= render "notice" %> 
      <% @products.each do |office| %> 
       <div class="item"> 
        <%= link_to image_tag(office.image_url), image_path(office.image_url), class: 'fancybox' %> 
        <p><strong><%= office.item_code%></strong> 
        </br><em><%= truncate(office.title, length: 18) %></em></p>     
        <p class="showArticle"><%= link_to 'Show Article', store_show_path %></p> 
        <p class="addTo"><a href="#">Quote this item</a></p> 
       </div> 
      <% end %> 
      <p class="clear"><%= will_paginate @products %></p> 

И, наконец, для представления «show» представлено следующее: -

<h2>Individual Product</h2> 

<%= @products.title(:id) %> 

Что вы видите сейчас, на самом деле не совсем так, поскольку я просто тестировал получение информации.

Следующее является результатом рек маршрутов: -

c:\Sites\work\easygifts>rake routes 
Prefix   Verb URI Pattern      Controller#Action 
store_index  GET  /store/index(.:format)   store#index 
store_writing GET  /store/writing(.:format)  store#writing 
store_office GET  /store/office(.:format)   store#office 
store_time  GET  /store/time(.:format)   store#time 
store_home  GET  /store/home(.:format)   store#home 
store_wellness GET  /store/wellness(.:format)  store#wellness 
store_travel GET  /store/travel(.:format)   store#travel 
store_bags  GET  /store/bags(.:format)   store#bags 
store_leisure GET  /store/leisure(.:format)  store#leisure 
store_show  GET  /store/show(.:format)   store#show 
products  GET  /products(.:format)    products#index 
       POST /products(.:format)    products#create 
new_product  GET  /products/new(.:format)   products#new 
edit_product GET  /products/:id/edit(.:format) products#edit 
product   GET  /products/:id(.:format)   products#show 
       PATCH /products/:id(.:format)   products#update 
       PUT  /products/:id(.:format)   products#update 
       DELETE /products/:id(.:format)   products#destroy 
store   GET /        store#index 
+0

Вы не передали свой продукт по ссылке, но он должен дать вам ошибку маршрутизации. У вас нет ошибок? – Mandeep

+0

Можете ли вы показать свой файл route.rb и ваш полный вид – Mandeep

+0

Hi Mandeep, No routing error, no error any sort, вместо этого при щелчке пользователь перенаправляется прямо на страницу «index». –

ответ

0

Есть несколько ошибок в коде:

а. Давайте посмотрим на ваши маршруты, для вашего шоу действий вашего маршрута:

store_show  GET  /store/show(.:format)   store#show 

Для показа действия вы не проходя магазины идентификатора и поэтому ноль, когда вы пытаетесь найти его в действии.

Fix

Вы должны использовать rails resourceful routing.Вы можете сделать что-то вроде этого:

resources :stores do 
    collection do 
    get "writing" 
    get "office" 
    get "time" 
    get "home" 
    get "wellness" 
    get "travel" 
    get "bags" 
    get "leisure" 
    end 
end 

Для вашего шоу действий это создаст маршрут вроде этого:

GET /stores/:id(.:format) stores#show 

, который позволит вам передать свой идентификатор магазина в вашей ссылке, а затем вы можете найти это в действии вашего контроллера

b. Смените свою ссылку на это:

<p class="showArticle"><%= link_to 'Show Article', store_path(office) %></p> // notice we are now passing your product in path helper 

c. Показать действие:

def show 
    @products = Product.find(params[:id]) # notice we have to use params[:id] to find your product also by default find searches your record with id so you don't need to use find_by 
    if @products.nil? 
    redirect_to action: :index 
    end 
end 
+0

Мне очень жаль Мандипа, ваше объяснение, похоже, имело смысл, однако я изо всех сил пытаюсь понять статью об уникальных ресурсах, поэтому мне придется больше почитать об этом. Я искал ваши предложения наивно, что привело к дополнительным ошибкам, и сегодня я делаю правильный беспорядок! Первая проблема заключалась в том, что изменения привели к конфликту с 'code'root 'store # index', как:« store''code », поэтому я удалил это, и, конечно, страница индекса магазина была потеряна. Тогда я понял, что, поскольку вы назвали его: магазины (согласно соглашению об именах), мне пришлось переименовать мой контроллер. –

+0

Теперь я, похоже, не могу правильно писать какие-либо ссылки. на странице индексов магазинов есть ссылки на каждый раздел; офис, письменный ect. ссылки ранее были написаны как 'code'store_office_path'code', я изменил это на' code'stores_office_path'code', и это не работает или многие из них были использованы! Извините, но снова потерял! Я думал, что любая связь была построена путем вызова контроллера, а затем действия в помощнике пути. Я также подумал, что в некоторых случаях мне не нужно включать имя контроллера. Что я не получаю? –

+0

@StuartAckland извините, если это вызвало ошибки, но эта ошибка поможет вам в долгосрочной перспективе, и лучше, если вы разрешите их сейчас на начальном этапе, а не позже для вашего вопроса о множественных маршрутах, вы должны проверить http://stackoverflow.com/ вопросы/646951/сингулярного или-множественном-контроллер-и-хелперы-имена-в рельсах. Для ваших помощников пути вы всегда можете использовать маршруты рейка и посмотреть, какие пути они создают для вас, или вы можете использовать [': as option'] (http://guides.rubyonrails.org/routing.html#using-as- in-inested-resources), чтобы изменить эти помощники путей. – Mandeep

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