RubyOnRails从数据库中提取信息

时间:2018-05-17 10:17:08

标签: ruby-on-rails controller request

我需要发送什么样的数据库请求来获取这种性质的表:

- 药物名称----- Saller 1 ----- Saller 2 ----- Saller 3

药物1 ------------价格1 -------价格2 ------价格3

- 药物2 -------------价格4 -------价格5 -------价格6

还有下一个型号: 药物表有药物名称

class Drug < ApplicationRecord
  has_many :drug_pharmacies     
  has_many :pharmacies, through: :drug_pharmacies 
end

药房表有药房名称

class Pharmacy < ApplicationRecord
    has_many :drug_pharmacies
    has_many :drugs, through: :drug_pharmacies
end

DrugPharmacies表有Drug_id,Pharmacy_id,价格

class DrugPharmacy < ApplicationRecord
    belongs_to :drug
    belongs_to :pharmacy
end

在药店(卖家)的控制器清单中,我已经形成了这样一个请求(通过地理位置寻找位于主药房旁边的竞争对手的逻辑)

pharmacy= Pharmacy.find(params[:id])
longitude = pharmacy.x
latitude = pharmacy.y
@competitors = Pharmacy.where(x: (longitude-0.005..longitude+0.005), y: (latitude-0.005..latitude+0.005))

在同一个控制器中,我发送有关药物的信息

@drugs = Drug.all.sort_by &:name

有了这样的请求,我必须在视图上进入数据库:

<table>
  <tr>
    <th>names</th> 
    <% @competitors.each do |apteka| %>        #filling the table with sellers
      <th><%= apteka.name %></th>
    <% end %>
  </tr>
                              #filling the table body with drugs and prices from competitors
  <% @drugs.each do |drug| %>
    <tr>
      <td><%= drug.name %></td>
      <% @competitors.length.times do |i| %>    #The problem in the presentation here is I suppose
        <td> <%= drug.drug_pharmacies.find_by_pharmacy_id(@competitors[i].id).price %> 
        </td>
      <% end %>
    </tr>
  <% end %>
</table>

1 个答案:

答案 0 :(得分:0)

答案是:

$(document).ready(function(){
    document.getElementById("text_box_id")
    .addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        document.getElementById("button_id").click();
    }
    });
});

在@competitors中,我们在广场上找到了我们的竞争对手。然后使用func包括:

pharmacy= Pharmacy.find(params[:id])
longitude, latitude = pharmacy.x, pharmacy.y
@competitors = Pharmacy.where(x: (longitude-0.005..longitude+0.005),
                              y: (latitude-0.005..latitude+0.005))

这会收集所有竞争对手的所有药品名称。