Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 多表搜索轨_Ruby On Rails_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 多表搜索轨

Ruby on rails 多表搜索轨,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我在rails应用程序中搜索多个表时遇到了一些问题,我不确定最好的方法是什么 我有两个表格:试验(有许多:结果)和结果(属于:试验)。我想创建一个搜索表单,点击这两个表并获取相关结果 我想在我的表格中,根据年份、灌溉(0,1,2整数)和地区,比较“品种一号”和“品种二号”的数据,并在3列表格中列出。第一列是“变体一”,第二列是“变体二”,第三列是前两列之间的差异。即 结果有列:variation_id(与:variation_one和:variation_two参数相关),年份 试验有列:区域i

我在rails应用程序中搜索多个表时遇到了一些问题,我不确定最好的方法是什么

我有两个表格:试验(有许多:结果)和结果(属于:试验)。我想创建一个搜索表单,点击这两个表并获取相关结果

我想在我的表格中,根据年份、灌溉(0,1,2整数)和地区,比较“品种一号”和“品种二号”的数据,并在3列表格中列出。第一列是“变体一”,第二列是“变体二”,第三列是前两列之间的差异。即

结果有列:variation_id(与:variation_one和:variation_two参数相关),年份 试验有列:区域id,灌溉

       | Variety One | Variety Two | Different
Yield  |   5.00      |    4.00     |  1.00
length |   1.00      |    0.50     |  0.50
我的看法

<%= simple_form_for :search, url: vpc_search_path do |f| %>
<%= f.select :variety_one, @variety.collect {|v| [v.variety_name, v.variety_id]}, :selected => '2300', :include_blank => false %>
<%= f.select :variety_two, @variety.collect {|v| [v.variety_name, v.variety_id]}, :selected => '2308', :include_blank => false %>
<%= f.input :irrigated, collection: @irrigations, as: :check_boxes, :input_html => {:checked => true} %>
<%= f.input :years, collection: @years, as: :check_boxes, :input_html => {:checked => true} %>
<%= f.input :regions, collection: @regions, as: :check_boxes, :input_html => {:checked => true} %>
<%= f.button :submit %>
<% end %>

'2300',:include_blank=>false%>
'2308',:include_blank=>false%>
{:选中=>true}%>
{:选中=>true}%>
{:选中=>true}%>
我的控制器

class VpcController < ApplicationController
  def index
    all = Result.select(:variety_id)
    @variety = Variety.where(:variety_id => all).order('variety_name DESC')
    @years = Result.select('DISTINCT year').pluck(:year)
    @regions = Trial.select('DISTINCT region_id').pluck(:region_id)
    @irrigations = Trial.select('DISTINCT irrigated').pluck(:irrigated)
  end

  def search
   @result = Result.search(params[:search])
   @trial = Trial.search(params[:search])
  end
end
class VpcControllerall.order('variation\u name DESC'))
@年份=结果。选择(“不同的年份”)。清除(:年)
@regions=Trial.select('DISTINCT region\u id').pull(:region\u id)
@灌溉=试验。选择(“不同灌溉”)。采摘(:灌溉)
结束
def搜索
@result=result.search(参数[:search])
@试用=试用。搜索(参数[:搜索])
结束
结束
搜索视图

<table class="table">
        <th></th>
    <th>Variety One</th>
    <th>Variety Two</th>
    <th>Difference</th>
<tr>
<td>Yield (bales/ha)</td>
<% @result.each do |v| %>
<td><%= "%.2f" % (v.lint) %></td>
<td><%= v.length %></td>
<td><%= ?? %></td>
<td></td>
<td></td>
<% end %>
</tr>
</table>

品种一
品种二
差别
产量(包/公顷)

好的。通常,对于表,您希望在循环中的每个迭代中显示一行,因此开始的tr元素将紧跟在@result.each行之后,结束的tr元素正好在末尾上方

真正的困难似乎是把结果和试验放在一起。是否有可能创建一个哈希数组,每个哈希有两个键:“result”和“trial”?然后迭代该数组,并从每个散列中获取值。但是这里没有足够的信息来知道这是否是一个可行的方法。问题是,如果@result包含一系列结果,而@trial包含一系列试验,那么你如何判断哪一个与哪一个相关


我还看到在视图本身中嵌入太多逻辑和计算的真正危险。您可能想考虑演示者模式,既可以制作自己的演示者对象,也可以使用像德雷珀那样的GEM。这样,在视图中,您只需声明每个对象是什么,并将其计算的详细信息保留在preenter类中。

您是在询问如何实现Result.search和Trial.search方法,还是在上面的代码中遇到问题?向我们展示您的搜索结果视图也可能会有所帮助。询问如何最好地解决此问题。我将在上面添加我的搜索视图。我有一个循环,我想我的主要问题是循环,因为我有两个表可以从中获取数据。在你的第三段开始之前,你一直在谈论变化一和变化二。我认为查看
试验
结果
表的结构可能会有所帮助。你也能把它寄出去吗?