我可以在不使用 .each() 的情况下渲染这个集合吗?
Can I render this collection without using .each()?
我是 ruby 的新手,但似乎如果我有一些东西,我应该能够在循环或 by defining a :collection
.[=19= 中呈现它们]
在这里,每个花园可能都有许多植物。我有一个部分以 "card" 布局呈现植物。此视图正确呈现每个花园的植物:
views/gardens/show.html.haml
.row.plant-cards
- @garden.plants.each do |plant|
= render("shared/plants/card", {plant: plant, garden: @garden} )
views/shared/plants/_card.html.haml
.col-md-2
.plant.thumbnail.text-center
= button_to("+", add_to_garden_path(plant, @garden.id), {method: :post ,remote: true})
= link_to(plant) do
= image_tag("http://lorempixel.com/g/150/150/food/",:alt => plant.name)
%h4.plant__title.caption= plant.name
我正在尝试通过 ajax 更新花园页面上渲染的植物。看来我需要将渲染植物 "cards" 的输出粘贴到 .html()
函数中,而使用 .each()
似乎很笨拙。似乎我应该能够将植物设置为 :collection
,就像我在下面尝试做的那样,但这不起作用:
views/plants/add_to_garden.js.erb
(抱歉混合 haml/erb - 我也在探索)
<% flash.each do |key, message| %>
$("#flash").html("<%= j render partial: "shared/flash_message", locals: {key: key, message: message } %>");
<% end %>
$(".plant-cards").html("<%= j render :partial => 'shared/plants/card', :collection => @garden.plants, :locals => {garden: @garden} %>");
当我对我的应用程序进行 ajax 调用时,出现此运行时错误:
Started POST "/plants/2/add_to_garden/1" for ::1 at 2016-12-30 20:32:18 -0500
Processing by PlantsController#add_to_garden as JS
Parameters: {"authenticity_token"=>"qJU/CEZudZFP9l6r1qdAlXJQrfY7fB0aZHmjRJh2yQO0IzxilP47mP2UjDDAmBNJouFtoAWkv/hJ2gCNR5BpgQ==", "id"=>"2", "garden_id"=>"1"}
Garden Load (0.3ms) SELECT `gardens`.* FROM `gardens` WHERE `gardens`.`id` = 1 LIMIT 1
Plant Load (0.2ms) SELECT `plants`.* FROM `plants` WHERE `plants`.`id` = 2 LIMIT 1
(0.1ms) BEGIN
SQL (0.2ms) INSERT INTO `gardens_plants` (`garden_id`, `plant_id`) VALUES (1, 2)
(160.8ms) COMMIT
(0.2ms) BEGIN
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
(0.1ms) COMMIT
Rendered shared/_flash_message.html.erb (0.3ms)
Plant Load (0.5ms) SELECT `plants`.* FROM `plants` INNER JOIN `gardens_plants` ON `plants`.`id` = `gardens_plants`.`plant_id` WHERE `gardens_plants`.`garden_id` = 1
Rendered shared/plants/_card.html.haml (29.7ms)
Rendered plants/add_to_garden.js.erb (42.3ms)
Completed 500 Internal Server Error in 238ms (ActiveRecord: 162.9ms)
NameError - undefined local variable or method `plant' for #<#<Class:0x007fdf9be0f6c8>:0x007fdf9bce6350>:
app/views/shared/plants/_card.html.haml:3:in `_app_views_shared_plants__card_html_haml___4163891484537289381_70299132319600'
...
只是为了把@Deep 的回答变成一个问题,他建议
Try using like this: <%= j render partial: 'shared/plants/card', collection: @garden.plants, as: :plant, locals: { garden: @garden } %>
将集合@garden.plants 指定为 :plant
就成功了。
我是 ruby 的新手,但似乎如果我有一些东西,我应该能够在循环或 by defining a :collection
.[=19= 中呈现它们]
在这里,每个花园可能都有许多植物。我有一个部分以 "card" 布局呈现植物。此视图正确呈现每个花园的植物:
views/gardens/show.html.haml
.row.plant-cards
- @garden.plants.each do |plant|
= render("shared/plants/card", {plant: plant, garden: @garden} )
views/shared/plants/_card.html.haml
.col-md-2
.plant.thumbnail.text-center
= button_to("+", add_to_garden_path(plant, @garden.id), {method: :post ,remote: true})
= link_to(plant) do
= image_tag("http://lorempixel.com/g/150/150/food/",:alt => plant.name)
%h4.plant__title.caption= plant.name
我正在尝试通过 ajax 更新花园页面上渲染的植物。看来我需要将渲染植物 "cards" 的输出粘贴到 .html()
函数中,而使用 .each()
似乎很笨拙。似乎我应该能够将植物设置为 :collection
,就像我在下面尝试做的那样,但这不起作用:
views/plants/add_to_garden.js.erb (抱歉混合 haml/erb - 我也在探索)
<% flash.each do |key, message| %>
$("#flash").html("<%= j render partial: "shared/flash_message", locals: {key: key, message: message } %>");
<% end %>
$(".plant-cards").html("<%= j render :partial => 'shared/plants/card', :collection => @garden.plants, :locals => {garden: @garden} %>");
当我对我的应用程序进行 ajax 调用时,出现此运行时错误:
Started POST "/plants/2/add_to_garden/1" for ::1 at 2016-12-30 20:32:18 -0500
Processing by PlantsController#add_to_garden as JS
Parameters: {"authenticity_token"=>"qJU/CEZudZFP9l6r1qdAlXJQrfY7fB0aZHmjRJh2yQO0IzxilP47mP2UjDDAmBNJouFtoAWkv/hJ2gCNR5BpgQ==", "id"=>"2", "garden_id"=>"1"}
Garden Load (0.3ms) SELECT `gardens`.* FROM `gardens` WHERE `gardens`.`id` = 1 LIMIT 1
Plant Load (0.2ms) SELECT `plants`.* FROM `plants` WHERE `plants`.`id` = 2 LIMIT 1
(0.1ms) BEGIN
SQL (0.2ms) INSERT INTO `gardens_plants` (`garden_id`, `plant_id`) VALUES (1, 2)
(160.8ms) COMMIT
(0.2ms) BEGIN
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
(0.1ms) COMMIT
Rendered shared/_flash_message.html.erb (0.3ms)
Plant Load (0.5ms) SELECT `plants`.* FROM `plants` INNER JOIN `gardens_plants` ON `plants`.`id` = `gardens_plants`.`plant_id` WHERE `gardens_plants`.`garden_id` = 1
Rendered shared/plants/_card.html.haml (29.7ms)
Rendered plants/add_to_garden.js.erb (42.3ms)
Completed 500 Internal Server Error in 238ms (ActiveRecord: 162.9ms)
NameError - undefined local variable or method `plant' for #<#<Class:0x007fdf9be0f6c8>:0x007fdf9bce6350>:
app/views/shared/plants/_card.html.haml:3:in `_app_views_shared_plants__card_html_haml___4163891484537289381_70299132319600'
...
只是为了把@Deep 的回答变成一个问题,他建议
Try using like this:
<%= j render partial: 'shared/plants/card', collection: @garden.plants, as: :plant, locals: { garden: @garden } %>
将集合@garden.plants 指定为 :plant
就成功了。