私はRuby on Railsプロジェクトを持っており、ページ上のいくつかの部分を更新するためにajaxを使用しています。私は投稿のセットを表示するのに役立つposts_controllerを持っています。それぞれの投稿には、hides_controllerを介して「非表示」および「非表示」する機能があります。さらに、このページには表示されている投稿数が表示されます。たとえば、ページを最初にロードすると、「5つの投稿が表示されます」と表示されます。ビューを介して別のconrollerの変数にアクセスする
ユーザーが非表示にすると投稿を非表示にするように設定しました。しかし、(posts_controllerによってレンダリングされた)ビューは、 "5 posts posts"ビットを "4 posts posts"に更新しません。私は "create.js.haml
" ファイルに次のAJAXを書き、それを解決するだろうと思った:
: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'で定義されています。明らかにこのコードを繰り返してもそれは非常にドライです。
別のコントローラから変数を参照するようにビューに指示する方法はありますか? IE: 'hides_controller'の代わりに 'posts_controller'から@posts変数を探しますか?
お手数をおかけします。あなたの時間をありがとう!
コントローラの構造:(親[conrollers]フォルダ内)
**controllers (folder)**
posts_controller.rb
hides_controller.rb
**users (folder)**
posts_controller.rb
posts_controller.rb
:(子で[ユーザー]フォルダ)
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
私はこれが好きですが、私のコントローラの構造は少し異なります。オリジナルのポストでコントローラの設定を参照してください。 hides_controllerをUser :: posts_controllerのサブクラスにする必要がありますか?手伝ってくれてどうもありがとう! –
また、@postsは '更新'アクションで定義され、 '作成'アクションでは定義されません。 –