[英]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.