我正在使用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?
谢谢。
答案 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
的事务,因此会出错。