2

他のビューのビューを使用する方法が見つかりません。

私はこの例でそれをよりよく説明できると思います:私は2つのコントローラーを持っています、IndexControllerそしてUserController。ユーザーコントローラーにloginは、ログインフォームをレンダリングし、フォームからの投稿が発生したときにユーザーを検証するビューで呼び出されるアクションがあります。

には、ホームページビューをレンダリングするIndexControllerというアクションがあります。homeこのビューではloginform、をレンダリングしたいのですが、ユーザー/ログインビューを再利用したいと思います。

私が使用したほとんどすべてのフレームワークには、ロジックを再利用して分離するために、別のコントローラーアクションを呼び出す方法があります。

Railsにはrender、次の方法で呼び出すことができるヘルパーがあることがわかりました。

render 'user/login'

また

render :template => 'user/login'

どちらの場合も、「ルートインデックス/ログインが存在しません」または「コントローラインデックスはログインアクションが必要です」などのエラーのみが表示されます。また、ログインビューのファイル名をloginまたはに設定しました_login。(部分ビューに使用されていることを読みました。)

4

2 に答える 2

4

これを行うには、views フォルダー内に共有フォルダーを作成し、ログイン フォームを部分的に作成します。

したがって、ログイン部分は次のようになります。

/app/views/shared/_loginform.html.erb:

<div id="loginform">        
    <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
      <%= f.text_field :email %>
      <%= f.password_field :password %>
      <%= f.submit "Login" %>
    <% end %>
    <div id="loginlinks">
      <%= link_to "Become a member", new_member_registration_path %> <br />
      <%= link_to "Forgot Password?", new_member_password_path %>
    </div>
</div>

次に、ビューで次のように呼び出します。

<%= render "shared/loginform"  %>
于 2012-09-26T23:41:09.083 に答える
1

Railscast: " #269 Template Inheritance "をご覧ください。

Rails 3.1 以降、コントローラーの継承はビューにも適用されるようになりました。これは、古い「共有フォルダー」戦略よりも優先されます。

つまり、共有パーシャルを配置するとapp/views/application、リソース固有のビュー ディレクトリ (例: ) でそれらをオーバーライドできますapp/views/users

于 2012-09-26T23:54:36.810 に答える