Rails: два атрибута разных таблиц в поле зрения - PullRequest
0 голосов
/ 04 мая 2011

Я пытался использовать два атрибута из двух разных моделей, чтобы их можно было использовать с методом calendar_for, предоставляемым плагином table_builder в представлении индекса. Я прошел через руководства по Rails для http://guides.rubyonrails.org/active_record_querying.html#retrieving-multiple-objects и такие сообщения, как Ruby on Rails: как объединить две таблицы однако я должен что-то делать не так.

Мои модели следующие:

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)

Среди других мой взгляд выглядит так:

код моего просмотра:

<% 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 Ответ

2 голосов
/ 04 мая 2011

Я вижу две проблемы, хотя я не знаком с библиотекой календаря.

Сначала убедитесь, что ваш запрос в контроллере возвращает что-то полезное.Из трех строк, которые вы нам дали, первая даже не выполняет поиск, она вызывает методы для неопределенной переменной.Вторая близка к работе, но вы ищете дату и сопоставляете ее с истинной ... Как насчет:

@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

Тем не менее, циклы не очень рубиновые.Рубиновый способ - использовать each:

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

или даже лучше, чтобы сделать все ваши ссылки:

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

edit

Основываясь на дополнительной информации, я думаю, что вы начинаете не с того места.Начнем с событий.

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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...