Alp*_*pha 3 formatting json view ruby-on-rails-3
我有一个带有属性id和电子邮件的@clients集合我想呈现这个json格式
[
{"id":" 1","label":"johndoe@yahoo.com","value":"1"},{"id":" 2","label":"paulsmith@gmail.com.com","value":"2"}
]
Run Code Online (Sandbox Code Playgroud)
在clients_controller中我定义了以下方法
def search
@clients = Client.where(:user_id => current_user.id).select('id','email')
render :partial => "clients/search"
end
Run Code Online (Sandbox Code Playgroud)
这是视图_search.json.erb
[
<%= raw @client.map{|client| '{"id":"' +" #{client.id}" +'","label":"' + "#{client.email}" + '","value":"' +"#{client.id}" +'"}' }.join(",") %>
]
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我发现它很难...是否有更优雅的方式在视图中生成自定义json格式?
使用从视图中调用的辅助函数来格式化输出或从控制器调用的库函数.示例(稍后):
def search
@clients = Client.where(:user_id => current_user.id).select('id','email')
respond_to do |format|
format.html
format.json do
render :json => custom_json_for(@clients)
end
end
end
private
def custom_json_for(value)
list = value.map do |client|
{ :id => " #{client.id}",
:label => client.email.to_s,
:value => client.id.to_s
}
end
list.to_json
end
Run Code Online (Sandbox Code Playgroud)
您只需要使用to_json方法.在你的情况下它是
@client.to_json(:only => [:id, :label, :value])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5899 次 |
| 最近记录: |