Ruby on rails 带“的命名范围问题”;有很多“通过”;协会
我使用命名作用域来处理一些过滤操作,日志显示一切都正常工作,只是在应用程序运行并找到正确的数据后,它会忽略找到的内容,只列出一个find.all而不是过滤结果。以下是详细情况 我有3个模型:用户、市场和时间表 用户Ruby on rails 带“的命名范围问题”;有很多“通过”;协会,ruby-on-rails,many-to-many,associations,modeling,Ruby On Rails,Many To Many,Associations,Modeling,我使用命名作用域来处理一些过滤操作,日志显示一切都正常工作,只是在应用程序运行并找到正确的数据后,它会忽略找到的内容,只列出一个find.all而不是过滤结果。以下是详细情况 我有3个模型:用户、市场和时间表 用户有许多:计划 用户拥有多个:市场,:通过=>:时间表 市场有很多:时间表 市场有很多:用户,:通过=>:schedules 计划属于用户 附表所属市场 在每个市场的“显示”页面上,我显示了在该市场销售商品的用户。我还显示了一周中这些用户在市场上的天数。该数据包含在联接模型(即计划)中
有许多:计划
用户拥有多个:市场,:通过=>:时间表
市场有很多:时间表
市场有很多:用户,:通过=>:schedules
计划属于用户
附表所属市场
在每个市场的“显示”页面上,我显示了在该市场销售商品的用户。我还显示了一周中这些用户在市场上的天数。该数据包含在联接模型(即计划)中
在market页面上,我需要支持按用户在市场上的日期筛选用户
在我的Market controller中,我有:
def show
@market = Market.find(params[:id])
@users = @market.users.filter_marketdate(params[:filter])
end
在我的市场模型中,我有:
def self.filter_marketdate(filter)
case filter
when 'monday' then monday.all
else find(:all)
end
end
named_scope :monday, :include => :schedules, :conditions => {'schedules.monday' => true }
在我的用户模型中,我有:
def self.filter_marketdate(filter)
case filter
when 'monday' then monday.all
else find(:all)
end
end
named_scope :monday, :include => :schedules, :conditions => {'schedules.monday' => true }
及
在我的市场展示观点中,我有以下几点:
<%= link_to_unless_current "All", :filter => 'all' %>
<%= link_to_unless_current "Mon", :filter => 'monday' %>
<% @market.schedules.each do |c| %>
<%= link_to c.user.name, c.user %>
<% end %>
它接着列出了每个连接到这个特定市场的用户,本质上是在做一个find.all
使现代化
为了回应Brad下面的评论,我尝试将我的markets/show视图中的代码更改为以下内容,但得到了相同的结果。我同意问题在这里的某个地方,但我不太明白如何解决它
<%= link_to_unless_current "All", :filter => 'all' %>
<%= link_to_unless_current "Mon", :filter => 'monday' %>
<% @market.users.each do |user| %>
<%= link_to user.name, user %>
<% end %>
”所有“%”
'星期一'>
不应该是:
#Market.rb
has_many :users, :through => :schedules
除此之外,此插件还可以帮助您:
它为每个sql语句及其来源提供反馈
f、 e:
更新:
你必须打电话
<%= link_to_unless_current "All", :filter => 'all' %>
<%= link_to_unless_current "Mon", :filter => 'monday' %>
<% @users.each do |user| %>
<%= link_to user.name, user %>
<% end %>
”所有“%”
'星期一'>
在您的视图中,您正在迭代每个market.schedule,而不是您设置的@users变量。事实上,你甚至没有在给我们看的代码中使用@users。就像Brad说的,你没有使用@user variablechange@market.users.each到just@users.each,我想你会得到你想要的。我刚刚注意到利希塔姆伯格用我说的同样的话更新了他的答案。根据你向我们展示的,这应该行得通。
<%= link_to_unless_current "All", :filter => 'all' %>
<%= link_to_unless_current "Mon", :filter => 'monday' %>
<% @users.each do |user| %>
<%= link_to user.name, user %>
<% end %>