第三次更新:好了,現在我很接近,我想。我現在正在創建數據並且正在DB中設置參數。我改變了商業控制器強PARAMS是:軌道4 RC1的多態關聯無法創建
def business_params
params.require(:business).permit(:name, :description, :address_attributes=>[:line1, :line2, :city, :state, :zip])
當我編輯現有的業務,我得到某種原因產生兩個地址。一個是空的,一個是完整的參數。所以,如果任何人有最後的推動,我認爲我非常接近:)。
地址模型
class Address < ActiveRecord::Base
belongs_to :addressable, polymorphic: true
end
經營模式:
class Business < ActiveRecord::Base
#each business belongs to user, through user_id
belongs_to :owner
has_one :address, as: :addressable
accepts_nested_attributes_for :address
# each business has many customers and has many services
has_many :customers
has_many :services
validates :owner_id, presence:true
validates_presence_of :name
#validates_length_of :state, is: 2
end
業務控制器:
class BusinessesController < ApplicationController
before_action :get_owner
before_action :set_business, only: [:show, :edit, :update, :destroy]
#helper_method :sort_column, :sort_direction
def index
@businesses = @owner.businesses
end
def show
#@customer = @business.customers.order(sort_column + " " + sort_direction)
end
def new
@owner = Owner.find(params[:owner_id])
@business = @owner.businesses.build
@address = @business.build_address(params[:address])
end
def edit
@address = @business.build_address(params[:address])
end
def create
@business = @owner.businesses.new(business_params)
@address = @business.create_address(params[:address])
respond_to do |format|
if @business.save
format.html { redirect_to owner_businesses_url(@owner), notice: 'Business was successfully created.' }
format.json { render action: 'show', status: :created, location: @business }
else
format.html { render action: 'new' }
format.json { render json: @business.errors, status: :unprocessable_entity }
end
end
end
def update
@address = @business.create_address(params[:address])
respond_to do |format|
if @business.update(business_params)
format.html { redirect_to owner_businesses_url(@owner), notice: 'Business was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @business.errors, status: :unprocessable_entity }
end
end
end
def destroy
@business.destroy
respond_to do |format|
format.html { redirect_to owner_businesses_url(@owner) }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_business
@business = @owner.businesses.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def business_params
params.require(:business).permit(:name, :description, :address_attributes=>[:line1, :line2, :city, :state, :zip])
end
def get_owner
@owner = Owner.find(params[:owner_id])
end
#def sort_column
# Customer.column_names.include?(params[:sort]) ? params[:sort] : "first_name"
#end
#def sort_direction
# %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
#end
end
表單視圖:
<%= form_for([@owner, @business]) do |f| %>
<% if @business.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@business.errors.count, "error") %> prohibited this business from being saved:</h2>
<ul>
<% @business.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :description %><br />
<%= f.text_area :description %>
</div>
<%= f.fields_for :address do |address| %>
<%= p address.object %>
<div class="field">
<%= address.label :line1 %><br>
<%= address.text_field :line1 %>
</div>
<div class="field">
<%= address.label :line2 %><br>
<%= address.text_field :line2 %>
</div>
<div class="field">
<%= address.label :city %><br>
<%= address.text_field :city %>
</div>
<div class="field">
<%= address.label :state %><br>
<%= address.text_field :state %>
</div>
<div class="field">
<%= address.label :zip %><br>
<%= address.number_field :zip %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
現在我越來越創建兩個地址。一個是空的,一個是參數集。差不多了 :)。
謝謝道奇。這是錯誤的地方,但你指出的具體行已經工作。什麼是不工作的地址部分。 @ business.build_address(params [:address])我認爲是必要的。我現在有一個不允許的參數消息,與以前不同。 @ business.address.create方法用於has_many關係。 – Art
所以,我做了更多的改變,接近。我現在得到了所有地址字段的不允許的參數。我在Rails 4.0中使用強參數,將「address_attributes => {}作爲business_params的一部分,我看到散列已經通過並輸入,但由於沒有能力使用這些屬性而被拒絕。將address_params從私有方法中移出,但我認爲它並沒有出現,所以我必須將它移動到某個幫助器上。 – Art
您是否有attr_accessible:需要訪問這些屬性的模型中添加了address_attributes? – dodgerogers747