改用局部视图的控制器

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。