Rails模型有2个外键但在提交form_for时只保存了一个

时间:2016-03-19 22:10:36

标签: ruby-on-rails ruby ruby-on-rails-4 foreign-key-relationship nested-form-for

我尝试使用嵌套资源保存form_for,这些资源将数据输入到属于其他2个模型且具有2个外键的模型中:User_id和listing_id。

问题是只有user_id被保存,尽管正在创建两个id,如控制台中所示,并且listing_id以正确的值传递。

我可能会遗漏一些显而易见的东西,但我对Rails相当新鲜。非常感谢帮助。感谢。

应用程序模型:

    belongs_to :user
    belongs_to :listing

清单模型:

    has_many :applications

用户模型

    has_many :applications

控制器:

    class ApplicationsController < ApplicationController
    before_action :authenticate_user! 


    def index

    end

    def update
      @application = current_user.applications.create  
    end


    def new 
      @application = Application.new
      @listing = Listing.find(params[:listing_id])

    end

    def create
      @application =     current_user.applications.create(application_params)
      redirect_to listing_applications_path
    end

    def your_applications
      @apps = current_user.applications

    end

    private
      def application_params
        params.require(:application).permit(:listing_id, :st_address, :unit, :city, :state, :move_in,:first_name, :last_name, :phone_numer, :pets, :current_address, :previous_landlord_name, :previous_landlord_phone, :company, :company_address, :company_phone, :is_40X, :annual_income)
      end
  end

查看:

      <%= form_for [:listing, @application] do |f| %>

的routes.rb

    resources :listings do
      resources :applications
    end

这是我在控制器中获得的内容 - http://i.stack.imgur.com/e52T0.png。 listing_id已作为参数传递,但在保存表单时会丢失。

  

由ApplicationsController处理#new为HTML   参数:{&#34; listing_id&#34; =&gt;&#34; 13&#34;}

     

ApplicationsController处理#create as HTML   参数:{........,&#34; listing_id&#34; =&gt;&#34; 13&#34;}

     

用户负载(0.1ms)SELECT&#34;用户&#34;。* FROM&#34;用户&#34;用户&#34;。&#34; id&#34; =? ORDER BY&#34;用户&#34;。&#34; id&#34; ASC LIMIT 1 [[&#34; id&#34;,11]]      (0.1ms)开始交易     SQL(0.4ms)INSERT INTO&#34;应用程序&#34; (.......)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)[.....,[& #34; user_id&#34;,11],[&#34; created_at&#34;,....],[&#34; updated_at&#34;,....]]

     

列出加载(0.1ms)SELECT&#34; listing&#34;。* FROM&#34; listing&#34;在哪里&#34;列表&#34;。&#34; id&#34; =?限制1 [[&#34; id&#34;,13]]

似乎传递了listing_id但未插入。那是为什么?

2 个答案:

答案 0 :(得分:0)

你的新人&#39;行动不应该创造任何东西。它应该是:

@application = Application.new

你的&#34;更新&#34;操作不应该创建新记录,而是更新刚刚编辑的记录。这将成为:

@application = Application.find(params[:id])
@application.update_attributes(application_params)

答案 1 :(得分:0)

一种可能的解决方案是在视图中添加一个隐藏字段,该字段将预先填充listing_id。

如果将其添加到视图中,则可以正常工作:

    <%= f.text_field :listing_id, value: params[:listing_id], class: "form-control hidden"%>.