我们刚在芝加哥召开的Rails核心黑客马拉松上发布了一个小功能:自动加载ActiveResource架构。注意:这在我的个人分支中,与rails仓库同步,并且可能会合并到Rails 2.3中。
我收到了一些请求,其中包括在Rails应用程序中使用Lighthouse::Ticket
记录和form_for
帮助时遇到的问题。想法是让资源可以自动加载一次最初的XML,就像ActiveRecord从数据库中加载架构那样。这已经是当前Rails脚手架的一部分
class PostsController < ApplicationController
def new
@post = Post.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @post }
end
end
end
不过有一个问题:对于受保护或嵌套操作,这可能无法奏效。理想情况下,一个Rails应用程序会为这个资源设置一个顶级路由,并且在request.format.xml?
为真时禁用任何事先的筛选器。
map.route 'tickets/new.:format', :controller => 'tickets', :action => 'new'
你可以通过直接修改#schema
哈希,或者使用自己的前缀调用#reset_schema
来解决这个问题。以下是使用Lighthouse API lib的一个示例。
Lighthouse.account = 'entp'
Lighthouse.token = 'monkey'
Lighthouse::Ticket.reset_schema :project_id => 1
# or, use a well known public project
Lighthouse.account = 'rails'
Lighthouse::Ticket.reset_schema :project_id => 8994
Ticket.new # => #<Lighthouse::Ticket:0x1707898 @attributes={"permalink"=>nil, "updated_at"=>nil, "number"=>nil, "title"=>nil, "creator_id"=>nil, "tag"=>nil, "attachments_count"=>0, "priority"=>0, "closed"=>false, "assigned_user_id"=>nil, "user_id"=>nil, "created_at"=>nil, "state"=>nil, "milestone_id"=>nil}, @prefix_options={:project_id=>8994}>
评论?