Запрос к базе данных postgres с помощью рельсов
Я пытаюсь найти в моей базе данных по параметрам из формы поиска. У меня все отлично работало в SQLlite, но когда я перешел на postgres, кое-что сломалось. в app / views/index.html.erb я определил форму:
<tr>
<%= form_tag(guidelines_path, :method => "get", id: "search-form") do %>
<td><%= label_tag(:invprogsearch, "Search by Investor and Program")%></td>
<td><%= text_field_tag :investor, nil, placeholder: "Enter investor" %></td>
<td><%= text_field_tag :program_code, nil, placeholder: "Enter program" %></td>
<td><%= submit_tag "Search", :name => nil %></td>
<% end %>
</tr>
и в моем контроллере (app/controllers/ Guide_controller.rb) я определил действие индекса как таковое
def index
if params[:investor].present? && params[:program_code].present?
@guidelines = Guideline.where(investor: params[:investor], program: params[:program_code])
else
@guidelines = Guideline.all
end
end
Есть идеи, почему это не сработает? У меня нет идей. Спасибо!
приложение / модели /guideline.rb:
class Guideline < ActiveRecord::Base
validates :guide_desc, presence: true
belongs_to :parent, class_name: 'Guideline'
has_many :children, class_name: 'Guideline', foreign_key: 'parent_id'
scope :top_level, where(:parent_id => nil)
def descendants
self_and_descendants - [self]
end
def self_and_descendants
self.class.tree_for(self)
end
def self.tree_for(instance)
where("#{table_name}.id IN (#{tree_sql_for(instance)})").order("#{table_name}.id")
end
def self.tree_sql_for(instance)
tree_sql = <<-SQL
WITH RECURSIVE search_tree(id, path) AS (
SELECT id, ARRAY[id]
FROM #{table_name}
WHERE id = #{instance.id}
UNION ALL
SELECT #{table_name}.id, path || #{table_name}.id
FROM search_tree
JOIN #{table_name} ON #{table_name}.parent_id = search_tree.id
WHERE NOT #{table_name}.id = ANY(path)
)
SELECT id FROM search_tree ORDER BY path
SQL
end
end