在Rails中,局部变量可以特定于控制器吗?我有一个用于创建帖子的控制器和一个附带的视图。我将视图重命名(添加了_)以使其成为局部视图后,它似乎不再起作用。
先谢谢您。
答案 0 :(得分:2)
部分不能呈现为视图。完全合理,因为局部视图不是视图-它们是视图的可重用块。
让我们说您拥有:
# 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
或者您可以append the view path。
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' %>