Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 使用曲别针轨道的嵌套属性4_Ruby On Rails 4_Paperclip_Nested Attributes_Activemodel - Fatal编程技术网

Ruby on rails 4 使用曲别针轨道的嵌套属性4

Ruby on rails 4 使用曲别针轨道的嵌套属性4,ruby-on-rails-4,paperclip,nested-attributes,activemodel,Ruby On Rails 4,Paperclip,Nested Attributes,Activemodel,我是rails新手,正在尝试使用嵌套属性。 主要的想法是有一个dealoffer模型,一个交易将有多个来自曲别针的DealU照片。 我已经看过Ryan的Railscast for nested forms,并阅读了许多文章,其中有许多关于同一问题的提示,但仍然不适合我 以下是我的实现: class Deal < ActiveRecord::Base belongs_to :user has_many :deal_photos, dependent: :destroy

我是rails新手,正在尝试使用嵌套属性。 主要的想法是有一个dealoffer模型,一个交易将有多个来自曲别针的DealU照片。 我已经看过Ryan的Railscast for nested forms,并阅读了许多文章,其中有许多关于同一问题的提示,但仍然不适合我

以下是我的实现:

    class Deal < ActiveRecord::Base
    belongs_to :user
    has_many :deal_photos, dependent: :destroy

    accepts_nested_attributes_for :deal_photos
    end


    class DealPhoto < ActiveRecord::Base
     belongs_to :deal
     has_attached_file :photo, :styles => { :large => "600x170", :medium => "250x250!",         :thumb => "100x100>" }, :default_url => lambda { |photo| photo.instance.set_default_url}

     def set_default_url
      ActionController::Base.helpers.asset_path('missing.png')
     end
    end
在我的控制器中:

    class DealsController < ApplicationController
     def new_deal
  @deal=Deal.new()
      @user= User.find(params[:id])
      3.times { @deal.deal_photos.build }
     end

    def create
     @deal = Deal.new(deal_param)
     @user= User.find(params[:user_id])
     if @deal.save
        @user.deals << @deal
        flash[:notice]="Thank you"
     end
    end

    def edit
     @deal=Deal.find(params[:deal_id])
     3.times { @deal.deal_photos.build }
    end

    def update
     @deal=Deal.find(params[:id])
     if @deal.update_attributes(deal_params)
      flash[:notice]="Deal updated successfully"
     end
    end

    private
    def deal_params
    params.require(:deal).permit(:title, :description, :contact_num, :user_id,    :deal_photos_attributes => [ :id, :caption, :photo, :deal_id])
    end
最后,在我的新政表格中:

    <%= form_for(:deal, :url=>{:action=>'create', :user_id=> @user.id}) do |f| %>

      <label>Title<b style="color:red;">*</b>
      <%= f.text_field(:title, :placeholder=>"") %>
      </label>
------更多领域-----------

      <%= f.fields_for :deal_photos do |builder| %>
        <div>
          <%= builder.label :caption, "Image Caption" %>
          <%= builder.text_field :caption %>

          <%= builder.label :photo, "Image File" %>
          <%= builder.file_field :photo %>
        </div>
      <%end%>

      <%= button_tag("Create", :class=> "secondary button", :button_type => "submit") %>
我已经迁移了db for deals\u photo以接受回形针

上面,创建了一个包含所有字段的表单,但不是文件上传的3个输入,而是只显示一个。它会创建3个空的association@deal.deal\u照片,但即使我从表单中选择一个图像进行上传,它也不会保存它。 如果您有任何有用的建议或其他类似的问题,请帮助

您的交易参数方法中有什么? 你允许交易照片的属性吗? 如果没有,那么做类似的事情


另外,您在查看的交易照片中是否有交易id?

最后,当我替换以下内容时,我能够在new\u deal.html.erb中解决问题:

    <%= form_for(:deal, :url=>{:action=>'create', :user_id=> @user.id}) do |f| %>


改变的是,第二行用于特定的新政实例。正如亚历克斯菲所说,第一种方法不起作用的原因可能是这些交易照片没有得到交易id。但我仍然没有弄清楚确切的原因

谢谢你的回复。我已经更新了问题,以便您可以查看交易参数。是的,我看到了交易id。我想您正在控制器中访问新交易操作。所以@deal是一个新实例,deal\u照片没有得到deal\u id。对吗?据我所知,构建操作是新操作的别名。此实现将创建3个实例及其之间的关联,但不会生成三个输入字段。只生成一个字段,它不会上载我选择的图片。1
    <%= form_for(:deal, :url=>{:action=>'create', :user_id=> @user.id}) do |f| %>
    <%= form_for(@deal, :url=>{:action=>'create', :user_id=> @user.id}) do |f| %>