0
하나의 사용자에 대해 여러 개의 주소를 생성

나는 현재 나의 레일에서 다음 설치 5 응용 프로그램이 각 사용자가 가질 예정이다는 Formtastic

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 

    if @user.save 
     redirect_to users_path 
    else 
     render 'new', notice: "User could not be created" 
    end 
    end 

    private 

    def user_params 
    params.require(:user).permit(
     :first_name, :last_name, :email, ... 
    ) 
    end 
end 

: 대응 컨트롤러는 다음과 같습니다

class User < ApplicationRecord 
    has_many :addresses 
    accepts_nested_attributes_for :addresses 
end 

class Address < ApplicationRecord 
    belongs_to :user 
end 

을 사용자 작성 중에 설정해야하는 복수 Addresses (예 : 청구 및 배송). (formtastic로 만든) 양식이 (배출 부)과 같습니다

= semantic_form_for @user do |user| 
    = user.input :first_name 
    = user.semantic_fields_for Address.new do |shipping_address| 
    = shipping_address.input :city 
    = shipping_address.input :usage, 
     as: :hidden, 
     input_html: { value: 'shipping' } 
    = user.semantic_fields_for Address.new do |billing_address| 
    = billing_address.input :city 
    = billing_address.input :usage, 
     as: :hidden, 
     input_html: { value: 'billing' } 

문제는 후자의 주소가 그래서 하나가 생성됩니다, 사이트 매개 변수에 있는지 OFC된다.

동일한 사용자에 대해 여러 주소를 만들려면 어떻게해야합니까?

답변

0

중첩 된 레코드를 만들려면 레코드를 시드하고 fields_for에 연결을 전달하십시오. 예를 들어

당신은 할 것이다 다음 PARAMS 다음 해시 줄 것

class UsersController < ApplicationController 
    # ... 
    def new 
    @user = User.new 
    # if we skipped this step there would be no address inputs on the form. 
    @user.addresses.new(value: 'shipping') 
    @user.addresses.new(value: 'billing') 
    end 
end 

<%= semantic_form_for(@user) do |f| %> 
    # ... 
    # fields_for iterates through @user.addresses creating 
    # inputs for each 
    <% f.semantic_fields_for :addresses do |a| %> 
    <%= a.inputs :street %> 
    <%= a.input :value, as: :hidden %> 
    <% end %> 
<% end %> 

:

{ 
    user: { 
    addresses_attributes: [ 
     { 
     street: 'Wall Street', 
     value: 'shipping' 
     }, 
     { 
     street: 'Broadway', 
     value: 'billing' 
     }, 
    ] 
    } 
} 

참고 적절한 복수화 여기에 매우 중요하다! 그런 다음 이것을 사용자 모델에 전달하면 accepts_nested_attributes이 나머지 작업을 수행합니다.

class UsersController < ApplicationController 
    # ... 
    def create 
    @user = User.new(user_params) 
    if @user.save 
     #... 
    else 
     # ... 
    end 
    end 

    private 
    def user_params 
     params.require(:user) 
      .permit(:email, :password, addresses_attributes: [:value, :street, :city]) # etc 
    end 
end