在rails中选择表中的特定行

时间:2015-02-20 22:47:14

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

我有一个名为药物的表的迁移和模型。我需要从药物表中选择一个特定的行。我也试图过滤掉所有没有当前用户身份的药物。

这是我目前的代码。

Medication.find(:name, :conditions => { :user_id => current_user.id }, :order => "Medication.name")

我知道这不完整,但我们将非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您可以像这样加载特定user_id的第一种药物(假设您的药物表有user_id):

Medication.where(:user_id => current_user.id).order(:name).first

如果我们的User模型有belongs_to :medications,则可以简化为:

current_user.medications.order(:name).first

如果你想加载例如第5次用药只需加4:

current_user.medications.order(:name).offest(4).first

或加载所有药物并反复进行:

current_user.medications.limit(10).each do |medication|
  puts medication.name
end

如果您想在网站上输出前十种药物,您可以这样做:

# in the controller
@medications = current_user.medications.order(:name).limit(10)

# in the view
<ul>
  <% @medications.each do |medication| %>
    <li><%= medication.name %></li>
  < end %>
</ul>

您使用的finder语法已弃用,已在Rails 4中替换。请参阅Rails Guide about querying the database

答案 1 :(得分:0)

如果您尚未设置has_many :through关联,这是一个完美的用例。

class User < ActiveRecord::Base
  has_many :prescriptions # or whatever
  has_many :medications, :through => :prescriptions
end

class Prescription < ActiveRecord::Base
  belongs_to :user
  belongs_to :medication
end

class Medication < ActiveRecord::Base
  has_many :prescriptions
  has_many :users, :through => :prescriptions
end

现在,您可以执行@user.medications之类的操作,仅检索该用户的药物,@user.medications.find(params[:medication_id]以查找用户指定药物中的特定药物,{{1}向用户添加药物,等等。

这是对这种技术的基本概述,但它是一个基本的Rails概念,因此有大量关于用例的信息接近你可能想做的任何事情。

答案 2 :(得分:0)

我解决了问题,我决定发布答案,以防其他任何人遇到类似的问题。

我最终没有在控制器中放置任何东西或者在我的模型中添加任何新内容。我只是在视图中使用了这行代码。

<%= Medication.offset(0).where(:user_id => current_user.id).pluck(:name).first %>

如果没有发布的所有人的支持,我无法做到,谢谢!