2016-09-11 1 views
1

В индексе моего приложения я показываю все проекты. Каждый проект имеет несколько приложений. Каждое приложение имеет изображение и main_image boolean. Я пытаюсь выполнить петлю через вложения и выбрать тот, где boolean main_image установлен в true, и сделать выбранный образ вложения миниатюр проекта.Рельсы, используя область действия, чтобы выбрать «основное изображение»

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

Я думаю, что я приближаюсь к этому неправильно. Может кто-то может рекомендовать, как заархивировать мою цель?

Я исследовал некоторые посты здесь: [Loop within Loop in Rails Controller

Attachment.rb

class Attachment < ApplicationRecord 
    belongs_to :project 
    scope :main_image, lambda {where("main_image = 1")} 

end 

Project.rb

class Project < ApplicationRecord 
    has_many :attachments, dependent: :destroy 
    has_and_belongs_to_many :categories 
    before_save :set_default_position 

    scope :active, lambda {where(:active => true).order("position ASC")} 

#array of picture attachments 
    def attachments_array=(array) 
     array.each do |file| 
      attachments.build(:attachment => file) 
     end 
    end 

    def set_default_position 
    if self.position == nil 
     self.position = 1 
    end 
    end 

end 

приветственное/index.html

<div id="Container" class="mixContainer"> 
    <% @projects.each do |project| %> 
     <div class="mix <% project.categories.each do |cat| %>category-<%= cat.id %> <% end %>project-<%= project.id %>" data-myorder="<%= project.position %>">  
      <div class="mixContent"> 
       <% project.attachments.main_image.each do |attachment| %> 
       <%= image_tag attachment.image.url(:thumb), class:"img-responsive" %> 
       <% end %> 
      </div>   
      <%= link_to(project) do %> 
      <div class="mixContentOver"> 
       <div class="thumbTitle"> 
        <h2><%= project.title %></h2>      
       </div> 
       <div class="thumbDescription"> 
        <h4><%= project.description %></h4>      
       </div> 
      </div> 
      <% end %> 
     </div> 
    <% end %> 

    </div> 

welcome_controller.rb

class WelcomeController < ApplicationController 

    def index 
     @projects = Project.active 

    end 


end 

ошибка:

ActionView::Template::Error (PG::UndefinedFunction: ERROR: operator does not exist: boolean = integer 
2016-09-11T20:13:59.328785+00:00 app[web.1]: LINE 1: ..." WHERE "attachments"."project_id" = $1 AND (main_image = 1) 
2016-09-11T20:13:59.328786+00:00 app[web.1]:                 ^
2016-09-11T20:13:59.328786+00:00 app[web.1]: HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. 
2016-09-11T20:13:59.328787+00:00 app[web.1]: : SELECT "attachments".* FROM "attachments" WHERE "attachments"."project_id" = $1 AND (main_image = 1)): 
2016-09-11T20:13:59.329627+00:00 app[web.1]:  49:  <% @projects.each do |project| %> 
2016-09-11T20:13:59.329796+00:00 app[web.1]:  50:   <div class="mix <% project.categories.each do |cat| %>category-<%= cat.id %> <% end %>project-<%= project.id %>" data-myorder="<%= project.position %>">  
2016-09-11T20:13:59.329956+00:00 app[web.1]:  51:    <div class="mixContent"> 
2016-09-11T20:13:59.329993+00:00 app[web.1]:  52:     <% project.attachments.main_image.each do |attachment| %> 
2016-09-11T20:13:59.330124+00:00 app[web.1]:  53:     <%= image_tag attachment.image.url(:thumb), class:"img-responsive" %> 
2016-09-11T20:13:59.330293+00:00 app[web.1]:  54:     <% end %> 
2016-09-11T20:13:59.330328+00:00 app[web.1]:  55:    </div>   
    [1]: https://stackoverflow.com/questions/10903919/loop-within-loop-in-rails-controller 
+0

Так, разве это не работает? –

+0

Он должен работать на первый взгляд. Получаете ли вы какое-либо сообщение об ошибке? – Ilya

+0

Нет, это не работает, это разбивает мое приложение. Обновление вопроса с журналом – Asan

ответ

1

Поскольку вы используете Postgresql, вы должны указать логический тип неявно:

scope :main_image, -> { where(main_image: true) } 
+0

О, хорошо, теперь я понимаю. Спасибо за вашу помощь. – Asan