Ruby on rails 带“的命名范围问题”;有很多“通过”;协会

Ruby on rails 带“的命名范围问题”;有很多“通过”;协会,ruby-on-rails,many-to-many,associations,modeling,Ruby On Rails,Many To Many,Associations,Modeling,我使用命名作用域来处理一些过滤操作,日志显示一切都正常工作,只是在应用程序运行并找到正确的数据后,它会忽略找到的内容,只列出一个find.all而不是过滤结果。以下是详细情况 我有3个模型:用户、市场和时间表 用户有许多:计划 用户拥有多个:市场,:通过=>:时间表 市场有很多:时间表 市场有很多:用户,:通过=>:schedules 计划属于用户 附表所属市场 在每个市场的“显示”页面上,我显示了在该市场销售商品的用户。我还显示了一周中这些用户在市场上的天数。该数据包含在联接模型(即计划)中

我使用命名作用域来处理一些过滤操作,日志显示一切都正常工作,只是在应用程序运行并找到正确的数据后,它会忽略找到的内容,只列出一个find.all而不是过滤结果。以下是详细情况

我有3个模型:用户、市场和时间表

用户
有许多:计划

用户
拥有多个:市场,:通过=>:时间表

市场
有很多:时间表

市场
有很多:用户,:通过=>: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 %>