繁体   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