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' の 'create' アクションで定義されておらず、代わりに 'posts_controller' で定義されています。明らかに、コードを繰り返しても DRY にはなりません。
別のコントローラーから変数を参照するようにビューに指示する方法はありますか? IE: 'hides_controller' ではなく 'posts_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