#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 %>