我正在尝试使用局部视图的控制器而不是我渲染它的视图。我的方案如下:
我有用户和用户可以发布一些东西。这就是为什么我有两个控制器和模型(用户和帖子)。
在用户页面中,有一个textarea用于输入内容和按钮发布。我已将此视图 ... / views / posts / _new.html.erb 写为部分视图,并在 ... /中呈现此部分 views / users / index.html.erb 并使用局部视图我已经使用过这段代码。
<%= render 'posts/new' %>
为了创建帖子,我写了这个方法;
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
... /视图/帖/ _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会理解我们想要做的事情并使用部分视图的控制器。我在这里错过了什么吗?
答案 0 :(得分:1)
对您的表单更明确..,
<%= form_for @post do |f| %>
并在您的用户#index控制器操作中初始化@post
@post = Post.new
问题是,在您当前的解决方案中,表单没有给出明确的url和方法,因此不知道您想要使用它创建帖子。
答案 1 :(得分:0)
在:type => 'submit'
button_tag
<%= 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 %>