我有一个用户控制器和一个通知控制器。用户 has_many 通知通过许多其他模型。有没有一种在我的通知#destroy 操作中定义@user 的好方法,以便我可以在我的javascript 中引用它?
在我的用户显示页面上,我有这样的东西。
用户/show.html.erb
<div>
<div id="user_notificationss_count">
"You have <%= @user.notifications.count %> notifications"
</div>
<%= render @user.notifications %>
</div>
通知/_notification.html.erb
<div id="notification_<%= @notification.id %>">
<div>Congrats, you have earned XXX badge!</div>
<div><%= link_to 'X', notification, method: :delete, remote: true %></div>
</div>
users_controller.rb
def show
@user = User.find(params[:id])
end
通知控制器.rb
def destroy
@notification= Notification.find(params[:id])
@notification.destroy
respond_to |format|
format.html { redirect_to :back }
format.js
end
end
通知/destroy.js.erb
$("#notification_<%= @notification.id %>").remove();
$("#user_notifications_count").html("You have <%= @user.notifications.count %> notifications");
在 javascript 中,第一行.remove();
正常工作。但是,第二行不起作用,因为我没有在控制器销毁操作中定义 @user。我的用户模型 has_many 通知通过多个其他模型。因此,每个通知都没有特定的 user_id。有没有办法从我呈现的 user#show 页面获取 user_id 参数?
对不起,如果我不清楚。请让我知道,我将补充额外的解释/代码。谢谢!
编辑:添加模型代码
用户.rb
attr_accessible :name
has_many :articles
has_many :comments
has_many :badges
def notifications(reload=false)
@notifications = nil if reload
@notifications ||= Notification.where("article_id IN (?) OR comment_id IN (?) OR badge_id IN (?)", article_ids, comment_ids, badge_ids)
end
文章.rb
attr_accessible :content, :user_id
belongs_to :user
has_many :notifications
评论.rb
attr_accessible :content, :user_id
belongs_to :user
has_many :notifications
徽章.rb
attr_accessible :name, :user_id
belongs_to :user
has_many :notifications
通知.rb
attr_accessible :article_id, :comment_id, badge_id
belongs_to :article
belongs_to :comment
belongs_to :badge