2

我找不到使用其他视图的视图的方法。

我想我可以用这个例子更好地解释它:我有两个控制器,IndexController并且UserController. 用户控制器有一个login通过其视图调用的操作,该操作呈现登录表单并在其表单中的帖子发生时验证用户。

IndexController中,有一个称为home呈现主页视图的操作。在这个视图中,我想渲染loginform,但我想重新使用用户/登录视图。

在我使用的几乎所有框架中,都有一种方法可以调用另一个控制器操作,以重用和隔离逻辑。

我发现,在 Rails 中,有一个助手render可以通过以下方式调用:

render 'user/login'

或者

render :template => 'user/login'

在这两种情况下,我只会收到诸如“路由索引/登录不存在”或“控制器索引必须登录操作”之类的错误。此外,我将登录视图文件名设置为login_login。(我读到它用于部分视图。)

4

2 回答 2

4

您可以通过在您的视图文件夹中创建一个共享文件夹并将登录表单创建为部分来做到这一点。

所以你的登录部分可能是这样的。

/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 模板继承”。

从 Rails 3.1 开始,控制器继承现在也适用于视图。这比旧的“共享文件夹”策略更受欢迎。

简而言之,您将共享的部分放入,app/views/application然后您可以在资源特定的视图目录(例如app/views/users)中覆盖它们。

于 2012-09-26T23:54:36.810 回答