Извикайте метод, свързан с частични релси

В моя контролер имам този метод, който ми връща списъка с конкретни книги controller/books_controller

  def postings
    @books = Book.postings(current_user.id).order("created_at ASC")
    render :partial =>'postings'
  end

Имам частично във views/books/_postings.html.erb

<div class="container">
<h4>My Partial Postings</h4>
 <% @books.each do |book| %>
      <div class="row">
        <div class="col-sm-2"><img src="<%= book.image_path %>" alt="..." class="img-responsive"/></div>
        <div class="col-sm-10">
          <h4 class="nomargin"><%= book.title %></h4>
          <p><%= book.description %></p>
          <p>Quantity: <%= book.quantity %></p>
          <p>Available for: <%= book.sale_type %></p>
     </div>
     </div>
     <hr>
 <% end %>
</div>

В моите маршрути:

 resources :books do
    collection do
      get 'postings'
    end
  end

на текущи рейк маршрути:

 postings_books GET  /books/postings(.:format)  books#postings

Когато използвам localhost:3000/books/postings, получавам желания частичен показващ списък с книги. Но когато искам да извикам този частичен от друг изглед, например от localhost:3000/dashboard/index:

<div class="tab-pane" id="postings">
                    <%= render  'books/postings', :collection => @books %>
</div>

Получавам следната грешка:

 Showing /home/swati/867/WorkSpace2/assignment_3/app/views/books/_postings.html.erb where line #4 raised:

undefined method `each' for nil:NilClass

Extracted source (around line #4):
<div class="container">
<h4>My Partial Postings</h4>
 <% @books.each do |book| %>
      <div class="row">
        <div class="col-sm-2"><img src="<%= book.image_path %>" alt="..." class="img-responsive"/></div>
        <div class="col-sm-10">

Разбирам, че рендирането е просто рендиране на частичния, без да се извикват публикациите на метода ми в books_controller и моят частичен няма достъп до @books, което е нула. Как може да се подходи към това?


person swati saoji    schedule 29.11.2015    source източник


Отговори (1)


Когато осъществявате достъп до dashboard/index, вие всъщност извиквате index метод на dashboards_controller. Ако искате да изобразите частичния books/postings там, трябва да добавите и списъка с книги (@books) в този контролер.

Повече информация тук: http://guides.rubyonrails.org/action_controller_overview.html

person sqbell    schedule 29.11.2015
comment
Благодаря, да, разбрах, че всъщност преместих публикациите на метода от books_controller на dashboard_controller. Все още се опитвам да разбера MVC. но току-що прочетох някъде, че контролерът трябва да бъде свързан с изглед. Така че, ако исках да осъществя достъп до метода за публикуване от изгледи на dashboard, беше по-добре да имам този метод в dashboard_controller вместо books_controller. Не съм сигурен дали това, което направих, е идеално, но работи добре. - person swati saoji; 29.11.2015
comment
Също така само да добавя точка за начинаещи потребители на rails като мен :), ако имате нужда от достъп до метод в изгледите, трябва да използвате helper_method .. така че в моя контролер имам helper_method :postings и от моя гледна точка мога извикайте метода. - person swati saoji; 29.11.2015