首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails,嵌套参数配置

Rails,嵌套参数配置
EN

Stack Overflow用户
提问于 2017-12-12 03:53:07
回答 1查看 89关注 0票数 0

我试图在数据库中保存一些模型中的信息,这些信息有另一个模型,如下所示:

代码语言:javascript
复制
class Saloon < ApplicationRecord    
   has_many :saloon_address

   accepts_nested_attributes_for :saloon_address
end

它有地址:

代码语言:javascript
复制
class SaloonAddress < ApplicationRecord
    belongs_to :saloon
end

这就是我的观点:

代码语言:javascript
复制
<%= form_with scope: :saloon, local: true, :url => "/saloon" do |form| %>
    <p>
        <%= form.label :name %><br>
        <%= form.text_field :name %>
    </p>

    <p>
        <%= form.label :specialty %><br>
        <%= form.text_field :specialty %>
    </p>

    <p>
        <%= form.label :services %><br>
        <%= form.text_field :services %>
    </p>

    <p>
        <%= form.label :telephone %><br>
        <%= form.text_field :telephone %>
    </p>

    <p>
        <%= form.label :online %><br>
        <%= form.check_box :online %>
    </p>

    <%= form.fields_for :saloon_address do |address| %>
        <p>
            <%= address.label :zip_code %><br>
            <%= address.text_field :zip_code %>
        </p>
        <p>
            <%= address.label :street %><br>
            <%= address.text_field :street %>
        </p>
        <p>
            <%= address.label :complement %><br>
            <%= address.text_field :complement %>
        </p>
        <p>
            <%= address.label :number %><br>
            <%= address.text_field :number %>
        </p>
        <p>
            <%= address.label :city %><br>
            <%= address.text_field :city %>
        </p>
        <p>
            <%= address.label :state %><br>
            <%= address.text_field :state %>
        </p>
        <p>
            <%= address.label :zip_code %><br>
            <%= address.text_field :zip_code %>
        </p>
    <% end %>

    <p>
        <%= form.submit %>
    </p>
 <% end %>

我的控制器:

代码语言:javascript
复制
class SaloonController < ApplicationController
    def new
    end

    def show
        @saloon = Saloon.find params[:id]
    end

    def index
        @saloons = Saloon.all
    end

    def create
        @saloon = Saloon.create(saloon_params)
        redirect_to @saloon
    end

    private 

    def saloon_params
        params.require(:saloon).permit(:name, :specialty, :online, :services, :average_price, :telephone,
            saloon_address_attributes: [:saloon_id, :street, :complement, :number, :city, :state, :zip_code, :latitude, :longitude])
    end
end

但当我试图存钱时,我总是收到这样的信息:

不允许参数::saloon_addresss

对发生了什么事有什么想法吗?

我已经搜索并尝试了很多不同的方法来允许,但我无法做到。

更新

我喜欢第一个答案:

代码语言:javascript
复制
class Saloon < ApplicationRecord    
    has_many :saloon_addresses

    accepts_nested_attributes_for :saloon_addresses
end

但现在我发现了一个错误:

代码语言:javascript
复制
Started POST "/saloon" for 127.0.0.1 at 2017-12-13 00:21:25 -0200
Processing by SaloonController#create as HTML
Parameters: {"utf8"=>"✓", 
"authenticity_token"=>"uF10p+ZHFiuard/CPxlt/yDgWhfzg2ttxdAWB81JTgLb+rC3ZTY+sNAgOWG3HRE8VKzHYP09QjkrL4ZMxQ3FFw==", "saloon"=>{"name"=>"asdjha", "specialty"=>"dsakhadksj", "services"=>"sdakha", "telephone"=>"21312312", "online"=>"1", "saloon_addresses"=>{"zip_code"=>"213213", "street"=>"sadasjdsa", "complement"=>"dsakhjdkasjh", "number"=>"23", "city"=>"sadjh", "state"=>"sadhj"}}, "commit"=>"Save Saloon"}
Completed 500 Internal Server Error in 2ms (ActiveRecord: 0.0ms)



ActiveRecord::AssociationTypeMismatch (SaloonAddress(#70246611463840) expected, got ["street", "sadasjdsa"] which is an instance of Array(#70246530918320)):

app/controllers/saloon_controller.rb:14:in `create'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-12 04:01:28

在您的has_many类顶部的Saloon调用应该像这样对saloon_address进行复数化:

代码语言:javascript
复制
class Saloon < ApplicationRecord    
   has_many :saloon_addresses

   accepts_nested_attributes_for :saloon_address
end

同样,params中的属性应该是多元的:

代码语言:javascript
复制
def saloon_params
  params.require(:saloon).permit(:name, :specialty, :online, :services, :average_price, :telephone, saloon_addresses_attributes: [:saloon_id, :street, :complement, :number, :city, :state, :zip_code, :latitude, :longitude])
end

最后,我不知道这是否只是您编写问题时的输入错误,但是saloon_address似乎在错误(额外的s)中出现了错误。如果您在代码中的某个地方错误地输入了模型,那么这将是一个问题。

不允许参数::saloon_addresss

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47765097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档