簡體   English   中英

Rails 4活動記錄模型has_many通過關聯嗎?

[英]Rails 4 active record model has_many through associations?

我一直在為這個概念而苦苦掙扎。 我仍然閱讀了該指南-我很難按需使用它。 http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

對我而言,由於所有約定,這個主題很難理解。 我下面的代碼是嘗試。 如果您認為合適,請隨時提供錯誤糾正以外的最佳做法建議。 太感謝了!

class Owner < ActiveRecord::Base
  has_many :shorturls, through: :campaigns
end

class Shorturl < ActiveRecord::Base
  has_many :owners, through: :campaigns
end

class Campaign < ActiveRecord::Base
  belongs_to :owner
  belongs_to :shorturl
  accepts_nested_attributes_for :owner
  accepts_nested_attributes_for :shorturl
end

我想做的是去url/campaign以嵌套形式創建一個新記錄,該記錄具有ownershorturl參數。

我的表格如下所示:

<h1>New Campaign</h1>

<%= form_for :campaign do |f| %>

  <%= f.fields_for :shorturl do |shorturl| %>
    <%= shorturl.label :redirect %><br>
    <%= shorturl.text_field :redirect %>
  <% end %>

  <%= f.fields_for :owner do |owner| %>
    <%= owner.label :email %><br>
    <%= owner.text_field :email %>
  <% end %>

  <%= f.submit %>

<% end %>

Routes設置如下:

post '/campaign', to: 'campaign#create'
get '/campaign', to: 'campaign#index'

我的Campaign#controller如下所示:

class CampaignController < ApplicationController
  def index
    @campaign = Campaign.new
  end

  def create
    @campaign = Campaign.new(campaign_params)

    respond_to do |format|
      if @campaign.save
        format.json { render :index, status: :created, location: @campaign }
      else
        format.json { render json: @campaign.errors, status: :unprocessable_entity }
      end
    end
  end

    private
    def set_campaign
      @campaign = campaign.find(params[:id])
    end

    def campaign_params
      params.require(:campaign).permit(shorturl_attributes: [:redirect], owner_attributes: [:email])
    end
end

到目前為止,當我提交表單時,出現以下錯誤:

ActionController::UnknownFormat in CampaignController#create
ActionController::UnknownFormat

上面有什么問題? 再次感謝!

更改response_to塊格式后進行更新,我收到一個unpermitted_pa​​rams錯誤:請參閱日志:

Started POST "/campaign" for ::1 at 2014-10-17 21:04:08 -0400
Processing by CampaignController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"9VOe+9VDhVaXR/eJKxA8PUJdZGoRQQZvWpfdX0SeDZrzL1gTVICMTjQkR+rk43WPSAxLz7s73YwhF1HdV8Qazg==", "campaign"=>{"shorturl"=>{"redirect"=>"http://www.somesite.com"}, "owner"=>{"email"=>"test@example.com"}}, "commit"=>"Save Campaign"}
Unpermitted parameters: shorturl, owner
   (0.1ms)  BEGIN
  SQL (0.4ms)  INSERT INTO "campaigns" ("created_at", "updated_at") VALUES ($1, $2) RETURNING "id"  [["created_at", "2014-10-18 01:04:08.211040"], ["updated_at", "2014-10-18 01:04:08.211040"]]
   (0.4ms)  COMMIT
  Rendered campaign/index.html.erb within layouts/application (4.5ms)
Completed 200 OK in 112ms (Views: 108.2ms | ActiveRecord: 0.8ms)
::1 - - [17/Oct/2014:21:04:08 -0400] "POST /campaign HTTP/1.1" 200 - 0.1166

但是根據我的campaign#controller #controller,我的參數已被適當地允許(至少我認為是這樣)

params.require(:campaign).permit(shorturl_attributes: [:redirect], owner_attributes: [:email])

和我的模型:

  accepts_nested_attributes_for :owner
  accepts_nested_attributes_for :shorturl

為什么會得到: Unpermitted parameters: shorturl, owner

當操作不處理請求格式時,引發ActionController::UnknownFormat

您的控制器僅響應JSON格式,但您的POST格式可能是application/x-www-form-urlencodedmultipart/form-data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM