我有一个 Ruby on Rails 项目,我正在使用 ajax 更新页面上的几个部分。我有一个 posts_controller 可以帮助显示一组帖子。每个帖子都可以通过 hides_controller “隐藏”和“取消隐藏”。此外,该页面还显示显示的帖子数。例如,当我最初加载页面时,它显示“显示 5 个帖子”。
一旦用户选择隐藏它,我已经设置了 ajax 来隐藏它;但是,视图(由 posts_controller 呈现)不会将“显示的 5 个帖子”位更新为“显示的 4 个帖子”。我在“”文件中写了以下ajax create.js.haml
,并认为它会解决它:
:plain
$(".post#{@post.id}_container").hide("drop", { direction: "up" }, 'fast');
$(".post_counter").html("#{escape_javascript(render('users/posts/hide'))}");
用户/帖子/hide.html.haml:
%h6= "#{@posts.size} posts shown"
我遇到的问题: @posts 未在“hides_controller”“创建”操作中定义,而是在“posts_controller”中定义。显然,重复代码并不会使其非常干燥。
有没有办法告诉视图从另一个控制器引用变量?IE:从“posts_controller”而不是“hides_controller”中找到@posts 变量?
非常感谢您的帮助。感谢您的时间!
控制器结构:
**controllers (folder)**
posts_controller.rb
hides_controller.rb
**users (folder)**
posts_controller.rb
posts_controller.rb
(在父 [conrollers] 文件夹中):
class PostsController < ApplicationController
code
end
posts_controller.rb
(在子 [用户] 文件夹中):
class Users::PostsController < PostsController
def update
@posts is defined here
end
end
hides_controller.rb:
class HidesController < ApplicationController
def create
code
end
end