如何使用Rails 4.2.4在同一页面上搜索,显示和编辑结果?

时间:2016-02-14 12:44:10

标签: ruby-on-rails ruby-on-rails-4

我正在开发一个应用程序来维护使用Rails的汽车信息。

我无法找到解决以下问题的方法,可能是因为我对Rails很新。应用程序维护有关车号,颜色和所有者的信息。用户应该能够搜索所有这三个属性(从下拉列表中选择)。当用户点击搜索按钮时,结果应显示在同一页面上(保留搜索框)。结果表将包含所有这些属性以及编辑按钮,用户可以使用它来就地更改所有者(当用户点击编辑按钮时,所有者字段变得可编辑)。

为每个搜索选项创建单独的控制器操作(和视图)是一个好主意吗?如果我这样做,我将不得不复制代码以在表格和编辑逻辑中显示结果。

如果我将所有这些放在同一视图上并尝试编辑所有者,如何立即反映页面上的更改?

关于如何安排行动和观点以实现这一目标的任何其他想法都是受欢迎的。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  

为每个搜索选项创建单独的控制器操作(和视图)是一个好主意吗? ]

没有

您需要阅读MVC (Model View Controller)。你的观点"逻辑应该在你的控制器中处理,数据逻辑由模型和处理器处理。用于输出数据的视图。

  

User应该能够搜索所有这三个属性(从下拉列表中选择)

这令人困惑;我会上课"搜索"作为一种方式让我在搜索框(文本字段)中键入文本,并将结果显示在某处。您建议的可能是过滤

为了给你一个整体模式,这就是我要做的事情:

#config/routes.rb
resources :cars #-> url.com/cars

#app/controllers/cars_controller.rb
class CarsController < ApplicationController 
  def index
    @cars = Car.all
    @filtered = params[:search] ? @cars : @cars.search(params[:search], params[:options])
  end
end

#app/models/car.rb
class Car < ActiveRecord::Base
  belongs_to :owner, class_name: "User"
  scope :search, ->(search, options) { where("#{options.each {|o| puts "#{eval(o)}: #{eval(search)}" } }") }
end

#app/views/cars/index.html.erb
<% form_tag cars_path do %>
  <% %i(name color owner).each do |x| %>
    <%= select_tag :x, options_from_collection_for_select(@cars, "id", "name") %>
  <% end %>
  <%= submit_tag "Filter" %>
<% end %>

<% @filters.each do |car| %>
  <%= car.number %>
  <%= car.color %>
  <%= car.owner.name %>
<% end %>
  

如果我将所有这些放在同一视图上并尝试编辑所有者,如何立即反映页面上的更改

您需要使用模态弹出窗口和ajax的组合。

模态弹出窗口将加载&#34;编辑&#34;来自服务器的表单,ajax将表单提交给服务器。然后,您可以根据ajax response呈现更改,而无需刷新。

Great resource here