Rails:视图中的两个属性不同的表

时间:2011-05-04 12:09:57

标签: ruby-on-rails activerecord view

我一直在尝试使用两个不同模型中的两个属性,因此它们可以与索引视图中table_builder插件提供的calendar_for方法一起使用。我已经阅读了http://guides.rubyonrails.org/active_record_querying.html#retrieving-multiple-objects的Rails指南以及Ruby on Rails: How to join two tables等帖子,但我一定做错了。

我的模型如下:

Class Event < ActiveRecord::Base
belongs_to :user

class User < ActiveRecord::Base
User has_many :events

我在控制器中尝试的不同方式(不是一次性完成)是:

@event.user.name
@users = User.joins(:event).where(:event => {:event_date => true})
@users = User.where(:event => :event_date)

Amoung其他人,我的观点如下:

我的观看代码:

<% calendar_for @users, :year => @date.year, :month => @date.month do |calendar| %>
<%= calendar.head('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',   'Saturday') %>
<% calendar.day(:day_method => :created_at) do |date, users| %>
<%= date.day %>
  <ul>
    <% for user in users %>
      <li><%= link_to h(user.name), user %></li>
    <% end %>
  </ul>
<% end %>
<% end %>
</div>

我已尝试相应地更改视图中的变量,但无济于事。我想在预订活动的特定日期显示用户名和用户链接。

1 个答案:

答案 0 :(得分:2)

我看到两个问题,虽然我不熟悉日历库。

首先,确保控制器中的查询返回有用的内容。在你给我们的三行中,第一行甚至不搜索,它调用未定义变量的方法。第二个接近工作,但你正在寻找一个日期并将其与真实相匹配......怎么样:

@users = User.joins(:event).where('events.event_date is not null')

此外,如果您有日期范围,则可以在搜索中包括:

@users = User.joins(:event).where('events.event_date > ? and events.event_date < ?', start_date, end_date)

在视图中,您与变量命名不一致。控制器设置@users变量,你可以访问一次,但后来你错过了@前面的@,这不是一回事。我不知道日历部分想要什么作为输入,但至少for循环应该是:

for user in @users

那说,for循环不是很rubyish。 ruby方式是使用each

@users.each do |user|
  ...
end

甚至更好,制作所有链接:

<ul>
<%= @users.collect {|user| content_tag(:li, link_to h(user.name), user).join } %>
</ul>

修改

根据更多信息,我认为你是从错误的地方开始的。让我们从事件开始。

Event.joins(:users).where('events.event_date is not null')


<% calendar_for @events, :year => @date.year, :month => @date.month do |calendar| %>
  <%= calendar.head('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',   'Saturday') %>
  <% calendar.day(:day_method => :event_date) do |date, events| %>
    <%= date.day %>
    <ul>
      <% for event in events %>
        <li><%= link_to h(event.user.name), event.user %></li>
      <% end %>
    </ul>
  <% end %>
<% end %>