[英]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
以嵌套形式創建一個新記錄,該記錄具有owner
和shorturl
參數。
我的表格如下所示:
<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
上面有什么問題? 再次感謝!
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-urlencoded
或multipart/form-data
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.