如何仅在 rails 中使用用户特定对象?
How do I only use user specific objects in rails?
我有 2 个模型,一个用于 Users
,另一个用于 Medications
。每个用户可以有很多药物。该用户可以创建药物,但看不到其他用户制作的药物。
<% @medications.each do |medication| %>
<tr>
<td><%= medication.name %></td>
<td><%= medication.user_id %> </td>
显然这段代码没有达到我想要的效果,但我如何才能将第一部分修改为仅在 current_user.id == medication.user_id
时才有效的条件?
选项 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 %>
除非您还需要显示其他药物/其他信息,否则我会选择选项 1。
在您的药物模型中使用 scope 以便您可以找到当前用户的药物并在其他地方使用它:
scope :users_medication, ->(current_user) { where user_id: current_user.id}
然后在您的视图中调用您刚刚在 Medication class 上定义的 class 方法并将其传递给当前用户:
<% Medication.users_medication(current_user).each do |medication| %>
<tr>
<td><%= medication.name %></td>
<td><%= medication.user_id %> </td>
在你的控制器中
def show
@user = User.find(params[:id])
@medications = @user.medications
end
这将仅显示该特定用户的药物
我有 2 个模型,一个用于 Users
,另一个用于 Medications
。每个用户可以有很多药物。该用户可以创建药物,但看不到其他用户制作的药物。
<% @medications.each do |medication| %>
<tr>
<td><%= medication.name %></td>
<td><%= medication.user_id %> </td>
显然这段代码没有达到我想要的效果,但我如何才能将第一部分修改为仅在 current_user.id == medication.user_id
时才有效的条件?
选项 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 %>
除非您还需要显示其他药物/其他信息,否则我会选择选项 1。
在您的药物模型中使用 scope 以便您可以找到当前用户的药物并在其他地方使用它:
scope :users_medication, ->(current_user) { where user_id: current_user.id}
然后在您的视图中调用您刚刚在 Medication class 上定义的 class 方法并将其传递给当前用户:
<% Medication.users_medication(current_user).each do |medication| %>
<tr>
<td><%= medication.name %></td>
<td><%= medication.user_id %> </td>
在你的控制器中
def show
@user = User.find(params[:id])
@medications = @user.medications
end
这将仅显示该特定用户的药物