Rails 4.2:日志中的未知属性或服务器错误

我有一个带有select_tagoptions_from_collection_for_select的表单,我似乎无法通过。 在视图中,当上传ID设置为uploadzip_id我得到302重定向,当它设置为uploadzip_ids ,我得到一个Unknown Attribute错误。

我有点困惑,因为我与外键设置了我的关系。 我确实有另一个模型,名为Uploadpdf复选框工作正常。

这是设置..

 class Campaign < ActiveRecord::Base has_one :uploadzip end class Uploadzip < ActiveRecord::Base belongs_to :campaign end 

DB / schema.rb

  create_table "campaigns", force: :cascade do |t| t.string "name" t.text "comment" t.datetime "created_at", null: false t.datetime "updated_at", null: false create_table "uploadzips", force: :cascade do |t| t.string "file_name" t.string "file_type" t.datetime "date" t.integer "size" t.integer "pages" t.string "file_ident" t.string "md5" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "campaign_id" end add_foreign_key "uploadzips", "campaigns" 

应用程序/控制器/ campaign_controller.rb

 class CampaignsController < ApplicationController def index @campaigns = Campaign.all.order("created_at DESC") end def new @campaign = Campaign.new end def create @campaign = Campaign.new(campaign_params) if @campaign.save flash[:success] = "Campaign Successfully Launched!" redirect_to @campaign else flash[:error] = "There was a problem launching your Campaign." redirect_to new_campaign_path end end ..... private def campaign_params params.require(:campaign).permit(:name, :comment, :uploadzip_ids, uploadpdf_ids: []) end end 

意见/运动/ _form.rb

  .....some typical fields..   .....some more typical fields  

更新

我已经更改了代码以更好地反映建议的外键。 现在,创建广告系列已成功,但它未与所选的uploadzip Zip文件相关联。 在调用@campaign.uploadzip ,它返回nil

这是更新的代码:

  

我也改变了控制器params.require ..

  def campaign_params params.require(:campaign).permit(:name, :comment, :campaign_id, uploadpdf_ids: []) end 

根据您的关联设置, foreign_key应为campaign_id而不是uploadzip_id 。 您应该根据您的用例更改您的关联foreign_key

此外,我建议您按照这些指南了解有关关联的更多信息。

302重定向可能不是一件坏事,因为你正在执行redirect_to new_campaign_path 。 在视图和控制器params.permit部分中使用uploadzip_id时是否正确创建了记录?

FaceBook小组的成员通过在控制器中添加一些额外的逻辑帮助我解决了这个问题。

  if @campaign.save zip = Uploadzip.find(params[:uploadzip_id]) zip.campaign = @campaign zip.save flash[:success] = "Campaign Successfully Launched!" redirect_to @campaign else flash[:error] = "There was a problem launching your Campaign." redirect_to new_campaign_path end 

..改变了select_tag的名称。

  <%= select_tag :uploadzip_id, options_from_collection_for_select( Uploadzip.all, :id, :file_name ), { include_blank: "Include a Zip File" } %>