我有2个模型,一个用于Users
,另一个用于Medications
。每个用户可以有很多药物。用户可以创建药物,但无法看到其他用户制作的药物。
<% @medications.each do |medication| %>
<tr>
<td><%= medication.name %></td>
<td><%= medication.user_id %> </td>
显然这段代码没有做我想要的,但是如何将第一部分修改为仅在current_user.id == medication.user_id
时才有效的条件?
答案 0 :(得分:1)
选项1:在您的控制器中,仅获取当前用户的药物。
# user model
class User < ActiveRecord::Base
has_many :medications # this needs to be in place
end
# in controller action that is rendering your view
@medications = current_user.medications
选项2:在您的视图中,跳过user_id
列中没有当前用户ID的药物:
# view
<% @medications.each do |med| %>
<% next if (med.user_id != current_user.id) %>
<% # more code %>
<% end %>
如果您根据当前用户显示部分药物,那么显然:
# view
<% @medications.each do |med| %>
<%= medication.name # example %>
<% next if (med.user_id != current_user.id) %>
<%= medication.reason # example %>
<% end %>
除非您需要显示其他药物/其他信息,否则我会使用Option1。
答案 1 :(得分:1)
在您的药物模型中使用scope,以便您可以找到当前用户的药物并在其他地方使用它:
scope :users_medication, ->(current_user) { where user_id: current_user.id}
然后在您的视图中调用您在Medication类上定义的类方法,并将其传递给当前用户:
<% Medication.users_medication(current_user).each do |medication| %>
<tr>
<td><%= medication.name %></td>
<td><%= medication.user_id %> </td>
答案 2 :(得分:0)
在您的控制器中
def show
@user = User.find(params[:id])
@medications = @user.medications
end
这将仅显示该特定用户的药物