繁体   English   中英

局部变量可以特定于控制器吗?

[英]Can partials be controller-specific?

在Rails中,局部变量可以特定于控制器吗? 我有一个用于创建帖子的控制器和一个附带的视图。 我将视图重命名(添加了_)以使其成为局部视图后,它似乎不再起作用。

先感谢您。

部分视图不是视图。

部分内容无法呈现为视图。 这很合理,因为局部视图不是视图-它们是视图的可重用块。

假设您有:

# app/controllers/posts_controller.rb
class PostsController < ApplicationController
  def new
    @post = Post.new
  end
end

# app/views/posts/new.html.erb
<%= form_for(@post) do |f| %>
  # ...
<% end %>

如果重命名new.html.erb > _new.html.erb Rails将不再能够找到视图-因为它不再是视图。

局部变量可以特定于控制器吗?

本质上,部分是特定于控制器的。 例如:

# app/views/posts/show.html.erb
<%= render partial: 'foo' %> 

将寻找app/views/posts/_foo.html.erb

# app/views/stories/show.html.erb
<%= render partial: 'foo' %>

将寻找app/views/stories/_foo.html.erb

那是因为Rails在视图查找路径前添加了app/views/controller_name

可以共享视图吗?

是。 但是您需要明确告诉Rails视图所在的位置。

# app/controllers/posts_controller.rb
class PostsController < ApplicationController
  def new
    @resource = Post.new
    render 'resources/new'
  end
end

# app/controllers/stories_controller.rb
class StoriesController < ApplicationController
  def new
    @resource = Story.new
    render 'resources/new'
  end
end

或者,您可以追加视图路径

class ResourcesController < ApplicationController
  prepend_view_path Rails.root.join('app/views/resources')
end

class PostsController < ResourcesController
  def new
    @resource = Post.new
    # will now default to rendering `app/views/resources/new.html.erb`
  end
end

可以共享部分内容吗?

是。 但是您需要告诉Rails部分的位置。

<%= render partial: 'shared/social_media_icons' %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM