2016-09-02 13 views
3

たとえば、私は多くの類似したページを持っています。違いは1つだけです:このページ(それぞれ異なるコントローラを持っています)には、それぞれ異なる変数があり、このhtml.erbファイルに適用されるものがあります。例えばRails、メソッドhtml/jsへの追加方法

、ビデオポストhtml.erb

<% for post in @posts_for_video> 
    here some html 
    and javascript 
    and also ruby code injection 
<% end %> 

ビデオコントローラ:

@posts_for_video = Post.where(photo: true) 

そして、私の写真のページ:

<% for post in @post_for_photos > 
    same html as video 
    same js as video 
    and same ruby code as video 
<% end %> 

写真コントローラ:

@posts_for_photo = Post.where(video: photo) 

私の質問:html + js + ruby​​_codeを入れる可能性はありますか?たとえばapplication_controller.rb

また、パラメータとして_some.html.erbに変数を渡す可能性はありますか?

私は何を私が探していること(application_controller.rbで)である、と思う:

def posts_for_all(post_variable) 
    for post in post_variable 
    html: post.theme 
    js: post.animation 
    ruby: some methods 
    end 
end 
+0

を参照してくださいなぜだろうそれを 'application_controller.rb'に入れたいのですか?私の意見では、ログインの検出を処理するメソッドや、特定のユーザーがその内部の特定のものに対応するものを見つけることなどが重要です。 –

+0

I.Eあなたはそれをきれいに保つべきであり、他の 'コントローラ'の機能だけを使用してください。 –

+0

@Muntasir Alam、application.rbについてはまさにその例です。しかし、私が話しているのは、すべてのhtml.erbでコードを繰り返さないことです(このhtmlの唯一の違いは1つの変数になります)。または、mb変数をパラメータとしてhtml.erbに渡す可能性がありますか? –

答えて

2

は、部分的にその全体のコードを入れて?参考のために:http://guides.rubyonrails.org/layouts_and_rendering.html

はこのようなものになるだろう:

# app/views/shared/_items.html.erb 
<% items.each do |item| %> 
    <!-- html stuff --> 
    <!-- javascript stuff --> 
    <%= # ruby stuff %> 
<% end %> 

をそして、あなたは別のビューではそのようにそれをレンダリングすることができます。これはあなたが探しているものです

# app/views/examples/show.html.erb 
<%= render 'shared/items', items: @items %> 

+0

を投稿します。それを解決しようとしながら私の頭を壊す。ありがとうございました! –

1

ソリューションは、部分的な

たちはフッターを持っていると言うことができますフォームを使用することです。我々はウェブサイトが私たちによって作られたことを私たちのウェブサイトに載せることを望んでいませんでした。私たちは何をしますか?我々は

<div class="container"> 
    <footer class="footer"> 
    <small> 
     Copyright &copy;<a href = "https://ca.linkedin.com/in/muntasir-alam-878625114">Muntasir Alam 2016</a> 
    </small> 
    <nav> 
     <nav> 
     <ul> 
      <li><%= link_to 'About', welcome_about_path %></li> 
     </ul> 
     </nav> 
    </nav> 
    </footer> 
</div> 
を書くことができインサイド名

_footer.html.erb_これはshow.html.erbような全景部分、およびでないことを意味)

の部分的なフォームを作成します

これで、表示するページにはrenderこのビューが表示されます。それはすべてのページでhtmlを作成するよりもずっといいですか?

application_controller.rbはどうなりますか?

application_controller.rbの質問には、これは何のために使用しますか?

ApplicationControllerには、実質的に、あなたのアプリケーション内のすべての他の コントローラは(この は、任意の平均では必須ではありませんが)を継承しようとしているクラスです。

参考までに、自分のアプリケーションの1つで自分のapplication_controller.rbファイルを見てみましょう。私のクラスインサイド

は私が

helper_method :current_user, :logged_in? 

    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    def logged_in? 
    current_user 
    end 

    def require_user 
    unless logged_in? 
     flash[:danger] = "You must be logged in to perform that action!" 
     redirect_to root_path 
    end 
    end 

お知らせ構造を有しています。私は、ユーザーが実際にログインしているかどうか、現在のユーザーが特定のアクションを行っているかどうかのチェックに基づいていくつかの他のコントローラによって使用されるいくつかのコードを持っている、または。

参照が Partials and Layouts

関連する問題