基本上每当我使用AJAX创建帖子时,由于这一行,它都不会呈现新帖子:
<%= link_to "promote", vote_scribble_path(:scribble_id => scribble.id, :vote => true), remote: true, method: :post%>
上面的链接实际工作,它只是阻止新创建的帖子的ajax渲染。
这是我在尝试使用AJAX创建新帖子时遇到的错误,它确实创建了帖子,它会在没有上面的行的情况下呈现新帖子。刷新页面后,将显示带有工作链接的新帖子。
Rendered scribbles/_scribbles.html.erb (18.9ms)
Rendered scribbles/create.js.erb (19.7ms)
Completed 500 Internal Server Error in 48ms
ActionController::RoutingError - No route matches {:action=>"vote", :controller=>"scribbles", :scribble_id=>155, :vote=>true}:
以下是完整的代码:
create.js.erb 在创建
后更新帖子列表 /*Replace the html of the div post_lists with the updated new one*/
$("#posts_list").html("<%= escape_javascript( render(:partial => "scribbles/scribbles") ) %>");
feedlist.html 会渲染所有帖子
<div id="posts_list">
<%=render :partial => 'scribbles/scribbles', :locals => {:scribbles => @scribbles}%>
</div>
scribbles / _scribbles.html link_to单行阻止了ajax渲染。但它的确有效。
<% @scribbles.each do |scribble| %>
<%= link_to "promote", vote_scribble_path(:scribble_id => scribble.id, :vote => true), remote: true, method: :post%>
<%end%>
即使这样的事情也会给我一个错误
<%= link_to "promote", vote_scribble_path()%>
vote_scribble_path(:scribble_id => scribble.id, :vote => true), remote: true, method: :post, :put,:get %> tried them all still same error
在AJAX CREATE之后,链接工作它不会出现,在页面刷新后一切都很好。 任何想法为什么?
resources :scribbles do
member do
post 'vote'
end
end
scribble_controller.rb
def vote
@scribble = Scribble.find(params[:scribble_id])
@vote = params[:vote]
if @vote == "true"
@v = :up
current_user.vote(@scribble, :direction => @v)
else
current_user.unvote_for(@scribble)
end
respond_to do |format|
format.js{}
end
end
答案 0 :(得分:2)
您应该在id
中传递scribble_id
而不是link
。
<%= link_to "promote", vote_scribble_path(:id => scribble.id, :vote => true), remote: true, method: :post%>
因为根据您定义的路线,生成的vote
操作路线为:
vote_scribble POST /scribbles/:id/vote(.:format) scribbles#vote
您可以通过运行rake routes
来检查。
正如您所看到的,vote_scribble_path
期待id
占位符而非scribble_id
这就是您收到错误的原因,因为Rails无法在您的应用中找到匹配的路由{{1使用占位符scribbles#vote
进行操作。