如何使用从@object传递的数据预填充表单?

时间:2016-01-10 02:15:32

标签: ruby-on-rails ruby

在我的网站上,用户可以上传"灵感"也就是用户发现鼓舞人心的图像或文字。

我想要创建一个功能,例如 Pinterest ,用户可以点击图片或文字,然后将其固定在"而不必上传自己的。

enter image description here

点击按钮后,我希望用户被重定向到灵感/ _form ,并填入相应的字段。

enter image description here

例如,我尝试将其传递到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 %>

2 个答案:

答案 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 %>