我的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
似乎提交甚至都没有发生。我做错了什么?
答案 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