在我的网站上,用户可以上传"灵感"也就是用户发现鼓舞人心的图像或文字。
我想要创建一个功能,例如 Pinterest ,用户可以点击图片或文字,然后将其固定在"而不必上传自己的。
点击按钮后,我希望用户被重定向到灵感/ _form ,并填入相应的字段。
例如,我尝试将其传递到new_inspiration_path({image: inspiration.image})
的路径中,但这并没有效果。
<% @inspirations.each do |inspiration| %>
<%= link_to new_inspiration_path, data: { modal: true } do %>
<span class="glyphicon glyphicon-plus"></span>
<% end %>
<%= link_to image_tag(inspiration.image.url(:medium)), inspiration %>
<% end %>
答案 0 :(得分:3)
您应该在控制器操作中分配此对象,如下所示:
def new
@inspiration = Inspiration.find(params[:inspiration_id])
end
路径应该是:
new_inspiration_path(inspiration_id: inspiration.id)
答案 1 :(得分:1)
为什么要复制功能?
如果某人&#34;引脚&#34;一个灵感,是不是灵感会与其他用户上传的灵感相同?这意味着,您应该具有创建 pin 的功能,而不是灵感。
如果脱离背景,我会删除它,但这是我要做的事情:
#config/routes.rb
resources :inspirations do
match :pin, via: [:post, :delete], on: :member #-> url.com/inspirations/:id/pin
end
#app/controllers/inspirations_controller.rb
class InspirationsController < ApplicationController
def pin
@inspiration = Inspiration.find params[:id]
if request.post?
current_user.pins << @inspiration
elsif request.delete?
current_user.pins.delete @inspiration
end
end
end
这将允许您使用:
#app/views/inspirations/index.html.erb
<% @inspirations.each do |inspiration| %>
<%= link_to "Pin", inspiration_pin_path(inspiration) %>
<% end %>
-
如果您想为&#34; pin&#34;添加额外的属性(例如自定义标题等),您可以使用简单的表单来完成...
#app/views/inspirations/index.html.erb
<% @inspirations.each do |inspiration| %>
<%= form_for inspiration, url: inspiration_pin_path(inspiration) do |f| %>
<%= f.text_field :caption %>
<%= f.submit %>
<% end %>
<% end %>