改用局部视图的控制器
Using Partial View's Controller Instead
我正在尝试使用局部视图的控制器而不是我渲染它的视图。我的情况如下;
我有用户,用户可以post做点什么。这就是为什么我有两个控制器和模型(用户和 post)。
在用户的页面中,有一个用于输入内容的文本区域和 post 的按钮。我已经将此视图 .../views/posts/_new.html.erb 编写为部分视图,并在中呈现此 partial .../views/users/index.html.erb 为了使用部分视图,我使用了这段代码。
<%= render 'posts/new' %>
为了创建post,我写了这个方法;
posts_controller.rb
def new
@post = Post.new
end
def edit
@post = Post.find(params[:id])
end
def create
@user = User.find(params[:user_id])
@post = @user.posts.create(post_params)
if @post.save
redirect_to root_path
else
render 'new'
end
end
.../views/posts/_new.html.erb
<%= form_for :post do |f| %>
<%= f.text_area :content, :class => "form-control", "rows" => "5", "id" => "comment", "placeholder" => "Write something to share with your mates ..." %><br/>
<%= button_tag "Share", :class => "btn btn-primary pull-right" do %>
<span class="glyphicon glyphicon-share-alt"></span>
<% end %>
<% end %>
这里的问题是,当我在局部视图中单击按钮时,它会转到设计控制器的 Users#RegistrationController。为什么?
Here,指南告诉我们,如果 partials 和呈现它的视图之间存在关系,rails 理解我们想要做什么,并改用分部视图的控制器。我在这里遗漏了什么吗?
在button_tag
中添加:type => 'submit'
<%= form_for :post do |f| %>
<%= f.text_area :content, :class => "form-control", "rows" => "5", "id" => "comment", "placeholder" => "Write something to share with your mates ..." %><br/>
<%= button_tag "Share", :type => "submit", :class => "btn btn-primary pull-right" do %>
<span class="glyphicon glyphicon-share-alt"></span>
<% end %>
<% end %>
或者像这样把button_tag
改成f.button
<%= f.button :submit, :class => "btn btn-primary pull-right" do %>
<span class="glyphicon glyphicon-share-alt"></span>
<% end %>
用你的表格更明确..,
<%= form_for @post do |f| %>
并在您的 user#index 控制器操作中将 @post 初始化为
@post = Post.new
问题是在您当前的解决方案中,表单没有明确的 url 和给定的方法,因此不知道您要用它创建 post。
我正在尝试使用局部视图的控制器而不是我渲染它的视图。我的情况如下;
我有用户,用户可以post做点什么。这就是为什么我有两个控制器和模型(用户和 post)。
在用户的页面中,有一个用于输入内容的文本区域和 post 的按钮。我已经将此视图 .../views/posts/_new.html.erb 编写为部分视图,并在中呈现此 partial .../views/users/index.html.erb 为了使用部分视图,我使用了这段代码。
<%= render 'posts/new' %>
为了创建post,我写了这个方法;
posts_controller.rb
def new
@post = Post.new
end
def edit
@post = Post.find(params[:id])
end
def create
@user = User.find(params[:user_id])
@post = @user.posts.create(post_params)
if @post.save
redirect_to root_path
else
render 'new'
end
end
.../views/posts/_new.html.erb
<%= form_for :post do |f| %>
<%= f.text_area :content, :class => "form-control", "rows" => "5", "id" => "comment", "placeholder" => "Write something to share with your mates ..." %><br/>
<%= button_tag "Share", :class => "btn btn-primary pull-right" do %>
<span class="glyphicon glyphicon-share-alt"></span>
<% end %>
<% end %>
这里的问题是,当我在局部视图中单击按钮时,它会转到设计控制器的 Users#RegistrationController。为什么?
Here,指南告诉我们,如果 partials 和呈现它的视图之间存在关系,rails 理解我们想要做什么,并改用分部视图的控制器。我在这里遗漏了什么吗?
在button_tag
:type => 'submit'
<%= form_for :post do |f| %>
<%= f.text_area :content, :class => "form-control", "rows" => "5", "id" => "comment", "placeholder" => "Write something to share with your mates ..." %><br/>
<%= button_tag "Share", :type => "submit", :class => "btn btn-primary pull-right" do %>
<span class="glyphicon glyphicon-share-alt"></span>
<% end %>
<% end %>
或者像这样把button_tag
改成f.button
<%= f.button :submit, :class => "btn btn-primary pull-right" do %>
<span class="glyphicon glyphicon-share-alt"></span>
<% end %>
用你的表格更明确..,
<%= form_for @post do |f| %>
并在您的 user#index 控制器操作中将 @post 初始化为
@post = Post.new
问题是在您当前的解决方案中,表单没有明确的 url 和给定的方法,因此不知道您要用它创建 post。