改为使用部分视图的控制器

时间:2017-02-28 08:09:35

标签: ruby-on-rails ruby-on-rails-3 devise partial-views

我正在尝试使用局部视图的控制器而不是我渲染它的视图。我的方案如下:

我有用户和用户可以发布一些东西。这就是为什么我有两个控制器和模型(用户和帖子)。

在用户页面中,有一个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会理解我们想要做的事情并使用部分视图的控制器。我在这里错过了什么吗?

2 个答案:

答案 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 %>