rails поиск идентификатора нескольких таблиц

#ruby-on-rails #ruby #ruby-on-rails-3

#ruby-on-rails #ruby #ruby-on-rails-3

Вопрос:

и используйте полиморфную ассоциацию rails..

Это wall_notification.rb

 class WallNotification < ActiveRecord::Base
    belongs_to :attachable, polymorphic: true
    belongs_to :user
end
  

Это picture.rb

 class Picture < ActiveRecord::Base
    belongs_to :user
    has_many :wall_notifications, as: :attachable
    mount_uploader :pic_upload
    validates :pic_upload,presence: true
end
  

Это user_video.rb

 class UserVideo < ActiveRecord::Base
    belongs_to :user
    has_many :wall_notifications, as: :attachable
    mount_uploader :user_video
end
  

Это career.rb

 class Career < ActiveRecord::Base
    has_many :wall_notifications, as: :attachable
    mount_uploader :career_file
end
  

и при создании нового изображения, user_video, career, wall_notifiacatin автоматически создаст новую запись, потому что мы используем полиморфную ассоциацию..

когда я проверяю свою консоль rails .. полиморфная ассоциация отлично работает..

 [1] pry(main)> WallNotification.all
  WallNotification Load (220.3ms)  SELECT `wall_notifications`.* FROM `wall_notifications`
=> [#<WallNotification:0xb4b51d0
  id: 1,
  user_id: 1,
  attachable_id: 1,
  attachable_type: "Picture",
  created_at: Wed, 19 Oct 2016 04:50:55 UTC  00:00,
  updated_at: Wed, 19 Oct 2016 04:50:55 UTC  00:00>,
 #<WallNotification:0xb4a98e4
  id: 2,
  user_id: 1,
  attachable_id: 1,
  attachable_type: "UserVideo",
  created_at: Wed, 19 Oct 2016 04:53:43 UTC  00:00,
  updated_at: Wed, 19 Oct 2016 04:53:43 UTC  00:00>,
 #<WallNotification:0xb4a9740
  id: 3,
  user_id: 1,
  attachable_id: 1,
  attachable_type: "Career",
  created_at: Wed, 19 Oct 2016 05:12:43 UTC  00:00,
  updated_at: Wed, 19 Oct 2016 05:12:43 UTC  00:00>]
  

но теперь я хочу список wall_notifications текущего пользователя .. и это мой контроллер.rb

 def index
    @wall_notifications_picture = current_user.wall_notifications.where(attachable_type: 'Picture')
    @picture_ids = @wall_notifications_picture.map {|w| Picture.find_by_id(w.attachable_id)}
    @wall_notifications_uservideo = current_user.wall_notifications.where(attachable_type: 'UserVideo')
    @uservideo_ids = @wall_notifications_uservideo.map {|w| UserVideo.find_by_id(w.attachable_id)}
    @wall_notifications_career = current_user.wall_notifications.where(attachable_type: 'Career')
    @career_ids = @wall_notifications_uservideo.map {|w| Career.find_by_id(w.attachable_id)}
 end
  

я хочу, чтобы данные каждой таблицы были в одной переменной экземпляра : ( : (
Кто-нибудь мне поможет..

Комментарии:

1. можете ли вы опубликовать какой-нибудь псевдокод о том, как вам нужны ваши данные?

Ответ №1:

Просто возьмите экземпляр hash и введите все данные в качестве ключа.

 def index
    @instance = {}
    @instance['wall_notifications_picture'] = current_user.wall_notifications.where(attachable_type: 'Picture')
    @instance['picture_ids'] = @instance['wall_notifications_picture'].map {|w| Picture.find_by_id(w.attachable_id)}
    @instance['wall_notifications_uservideo'] = current_user.wall_notifications.where(attachable_type: 'UserVideo')
    @instance['uservideo_ids'] = @instance['wall_notifications_uservideo'].map {|w| UserVideo.find_by_id(w.attachable_id)}
    @instance['wall_notifications_career'] = current_user.wall_notifications.where(attachable_type: 'Career')
    @instance['career_ids'] = @instance['uservideo_ids'].map {|w| Career.find_by_id(w.attachable_id)}

end
  

Теперь отправляйте только @instance в представление.

в представлении,

<%= @instance %>

Вы можете использовать каждый ключ в нем для отображения в соответствующих местах.

Комментарии:

1. хай @sravan я нахожу другой ответ

2. мой сработал? если сработало, по крайней мере, поддержите его, чтобы я мог думать, что это не так. 🙂

3. подождите, я объясню

4. проверьте ответ сейчас.

5. попробуйте использовать render text: @instance и верните false, и проверьте, что находится в @instance .

Ответ №2:

Спасибо всем .. теперь я нахожу простой шаг

в моем controller.rb

 def index
    @wall_notifications = current_user.wall_notifications.order("id DESC")
end
  

и мой view.html.erb

 <% if current_user.wall_notifications.present? %>
  <!-- wall notification picture-->
  <% @wall_notifications.each do |wall_notification|%>
  <div class="row margin-top">
    <div class="col-md-12">
      <div class="right-article">    
        <div class="item-side-article">
          <% if wall_notification.attachable_type == 'Picture'%>
            <% if wall_notification.attachable.pic_upload.file.extension.downcase == 'mp4'%>
               <video style="float:left;height:102px;margin-right:10px;width:180px;" controls>
                  <source src="<%= wall_notification.attachable.pic_upload.url%>" type="video/mp4">
                Your browser does not support the video tag.
                </video>
            <% else %>
              <img src="<%= wall_notification.attachable.pic_upload.url%>">
            <% end %>
          <% end %>
          <% if wall_notification.attachable_type == 'UserVideo'%>
            <% if wall_notification.attachable.user_video.present? %>
              <video style="float:left;height:102px;margin-right:10px;width:180px;" controls>
                <source src="<%= wall_notification.attachable.user_video.url%>" type="video/mp4">
                Your browser does not support the video tag.
              </video>
            <% end %>
          <% end %>
          <% if wall_notification.attachable_type == 'Career'%>
            <% if wall_notification.attachable.career_file.present?%>
              <img src="<%= wall_notification.attachable.career_file.url%>">
            <% end %>
          <% end %>
        </div>
      </div>
    </div>
  </div>
  <%end%>
  <!-- wall notification picture end -->
<% end %>