Link_to不从自定义控制器操作渲染部分

时间:2015-12-23 11:36:13

标签: javascript ruby-on-rails ajax ruby-on-rails-4

我点击boxes_list尝试渲染Link_to。不知道为什么它不起作用。

# Routes.rb    
resources :modifications do 
    collection do
      get 'refresh'
    end
end


# ModificationsController
  def refresh
    respond_to do |format|
        format.js {}
    end
  end


# link in /views/modifications/_boxes_list.html.erb that should refresh boxes_list
<%= link_to "refresh", refresh_modifications_path(@modification), remote: true, method: :refresh %>


# JS responce in /views/modifications/refresh.js.erb
$('#boxes_count').html("<%= escape_javascript(render( :partial => 'boxes_list' )).html_safe %>");

在服务器控制台中,按此链接时看不到任何内容。链接在常规显示操作下的修改显示页面上。 Rails 4!

2 个答案:

答案 0 :(得分:2)

首先,您应该从method: :refresh中删除link_to(您不需要它):

<%= link_to "refresh", refresh_modifications_path, remote: true %>

如果您使用的是collection路线,也无需提供对象。如果您使用了member路由,则必须传递该对象。

-

为了省去尝试挑选代码的麻烦,以下是您应该拥有的内容:

#config/routes.rb
resources :modifications do
   get :refresh, on: :member #-> url.com/modifications/:id/refresh
end

#app/controllers/modifications_controller.rb
class ModificationsController < ApplicationController
   respond_to :js, only: :refresh
   def refresh
   end
end

#app/views/modifications/refresh.js.erb
$('#boxes_count').html("<%=j render partial: 'boxes_list' %>");

您发送请求如下:

<%= link_to "Refresh", refresh_modification_path(@modification), remote: true %>

答案 1 :(得分:0)

为什么要放method: :refresh。从链接中删除method: :refresh。您的route应为

resources :modifications do
  member do
    get :refresh
  end
end

那么你的路径应该是

<%= link_to "refresh", refresh_modification_path(@modification), remote: true %>

并且在'刷新&#39;动作

def referesh
  @modification = Modification.find(params[:id])
  respond_to do |format|
     format.js{}
  end
end

来源Adding More RESTful Actions