【问题标题】:How to prepopulate form with data passed from @object?如何使用从@object 传递的数据预填充表单?
【发布时间】:2016-01-10 19:46:13
【问题描述】:

在我的网站上,用户可以上传“灵感”,也就是用户觉得鼓舞人心的图片或文字。

我想创建一个功能,例如 Pinterest,用户可以点击图像或文本来“固定”它,而不必上传自己的。

单击按钮后,我希望用户被重定向到 inspirations/_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 %>

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您应该在控制器操作中分配此对象,如下所示:

    def new
      @inspiration = Inspiration.find(params[:inspiration_id])
    end
    

    路径应该是:

    new_inspiration_path(inspiration_id: inspiration.id)
    

    【讨论】:

    • 问题可能出在您的控制器创建操作或表单视图代码中。
    • 看来你需要这样的东西 if params[:inspiration_id] @inspiration = Inspiration.find(params[:inspiration_id]) else @inspiration = current_user.inspirations.build end 抱歉代码格式化。
    【解决方案2】:

    为什么要复制功能?

    如果有人“固定”了一个灵感,那么这个灵感不是和其他用户上传的一样吗?这意味着,您应该具有创建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 %>
    

    --

    如果您想为“pin”添加额外的属性(例如自定义标题等),您可以使用简单的表单来完成...

    #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 %>
    

    【讨论】:

      猜你喜欢
      • 2014-07-31
      • 1970-01-01
      • 2018-08-15
      • 2021-10-06
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      相关资源
      最近更新 更多