无法使用'id'= show显示带有ajax的事务

时间:2015-08-11 15:35:33

标签: ruby-on-rails ruby ajax

我正在使用NetBeans IDE,rails 4,ruby 2.2.0。我正在尝试使用ajax来显示“show”页面,而是使用'id'= show error获取无法找到的事务。在format.html中我使用'id'属性来设置事务值,我该如何在ajax中执行此操作?

  format.html { render :action => 'show',:id=>@transaction } --- id is set
  format.js {render :js => "window.location = '/transactions/show'"}  --
  -   how do I set an 'id' property in js?

谢谢。

3 个答案:

答案 0 :(得分:3)

在上面的内容中,只需要进行以下编辑:

format.js {render :js => "window.location = '/transactions/#{@transaction.id}'"} 
# the above should render something like '/transactions/12345' as the URI/URL

简而言之,/transactions/show不是标准Rails显示页面的有效URI。在终端窗口中,运行rake routes,您将看到更多类似于以下内容的交易以及所有其他路线:

transactions GET /transactions/:id(.:format) transactions#show

所以......上面的路由描述中的id,需要是保存的对象/实例的实际ID,而不是创建链接时的字符串'show'。这样,Rails路由器知道如何处理请求(即,要调用什么控制器,传入什么数据等)。

答案 1 :(得分:2)

假设您的交易路线是根据铁路惯例定义的,您只需执行以下操作:

"window.location='#{transaction_path(@transaction)}'"

如果没有这个诀窍,请添加routes.rb文件的内容,以便我们能够正确回答。

答案 2 :(得分:0)

而不是:

format.js {render :js => "window.location = '/transactions/show'"}

执行:

format.js {render :js => "window.location = #{transactions_path(@transaction)}"}

此处transactions_path(@transaction)将被评估为交易显示页面的相对路径。问题位于/transactions/show中,映射到routes.rb中的'/transactions/:id。在TransactionsController#show代码中,代码正在尝试查找标识为show的事务,因此会出错。