ruby on rails:form_for不重定向

时间:2016-01-15 13:36:24

标签: ruby-on-rails forms

我的form_for没有重定向到我指定的操作。我真的无法解决问题所在。

我的观点详细资料:

<!-- Comments Form -->
    <div class="well">
      <h4>Comment:</h4>
      <form class="comment-form">
        <div class="form-group">
          <%= form_for(:comments, :url => {:action => 'post_comment'}) do |f| %>
              <%= f.text_area(:content, :rows => "3", :class => "form-control new-comment") %>
              <%= f.hidden_field :book_id, :value => @comments[:book_id] %>
              <%= f.hidden_field :user_id, :value => session[:user_id] %>
              <%= submit_tag("Send") %>
          <% end %>
        </div>
      </form>
    </div>

我的控制员:

def detailedbook
    @book = Book.find(params[:id])
    @comments = Comments.new
    @rating = Rates.new(:book_id => params[:id], :user_id => session[:user_id])
    @previouscomments = Comments.where(:book_id => params[:id] )
  end
def post_comment
    @comments = Comments.new(params.require(:comments).permit(:content, :book_id, :user_id))
    @comments.book_id = params[:id]
    if @comments.save
      redirect_to(:action => 'showbooks')
    else
      redirect_to(:action => 'home')
    end
  end

似乎提交甚至都没有发生。我做错了什么?

3 个答案:

答案 0 :(得分:0)

我认为您指定的url无效。假设Comments是您的控制器名称:

<%= form_for(:comments, :url => post_comment_comments_url, :method=> "POST" ) do |f| %>

这应该适合你。

答案 1 :(得分:0)

我假设您有一个“评论”模型,您正在共享的是comments_controller。您不应该为模型使用复数形式。您应该对模型使用Comment(此类的每个对象都是1个注释)和控制器的复数形式。

第一次尝试轻松修复:

<%= form_for(@comments, :url => {:action => 'post_comment'}) do |f| %>

@comments是您正在编辑/创建的实际实例。 Rails意识到并搜索了正确的控制器(comments_controller)。

第二个选项 由于rails如何使注释复数化,这可能是一个问题。您可以在为表单页面呈现的html代码中检查它,或使用以下方法绕过rails帮助程序:

<%= form_tag(controller: 'comments', action: 'post_comment', method: 'post') ... %>

如果没有回答您的问题,请修改您的帖子,添加您的模型和表单页面的HTML代码。

答案 2 :(得分:0)

您必须找到相应的URI Pattern,它将指向它们各自的Controller#Action或您要调用的控制器方法。 Rails不知道你在谈论哪个控制器动作。 您可以在rake routes找到它并查看Controller#Action列并使用相应的URI Pattern。 它会喜欢这样的东西。

 Prefix Verb     URI Pattern                        Controller#Action
         root GET      /                                  home#index
       logout GET      /logout(.:format)                  session#destroy
        login GET      /login(.:format)                   session#new