2017-11-30 6 views
0

(뉴비 레일은 여기) 우 슈아 리오와 피챠의 2 가지 모델이 있습니다. Usuario는 Ficha와 has_one 연관이 있습니다.왜 내 연결된 개체가 저장되지 않습니까?

다음
class UsuariosController < ApplicationController 
     before_action :authenticate_user! 
     def index 
     @usuarios = Usuario.all 
     @usuario_last = Usuario.last(10) 
     @usuario_rev = @usuario_last.reverse 
     @user_count = current_user.usuarios 

     #Search 
     @usuario_search = if params[:term] 
      Usuario.where("name ~* ?", params[:term]) 
     else 
      Usuario.all 
     end 
     @usuario_pag = @usuario_search.paginate(:page => params[:page], :per_page => 10) 
     end 

     def show 
     @usuario = Usuario.find(params[:id]) 
     end 

     def new 
     @usuario = current_user.usuarios.build 
     end 

     def create 
     @usuario = current_user.usuarios.build(usuario_params) 

     @usuario.save 
     redirect_to @usuario 
     end 

     def edit 
     @usuario = Usuario.find(params[:id]) 
     end 

     def update 
     @usuario = Usuario.find(params[:id]) 

     if @usuario.update(usuario_params) 
      redirect_to @usuario 
     else 
      render 'edit' 
     end 
     end 

     def destroy 
     @usuario = Usuario.find(params[:id]) 
     @usuario.destroy 

     redirect_to usuarios_path 
     end 

     private 
     def usuario_params 
      params.require(:usuario).permit(:name, :age, :doc, :docnum, :estadocivil, :country, :street, 
      :direction, :municipal, :zipcode, :tel1, :tel2) 
     end 
    end 

내 Ficha 컨트롤러입니다 :

여기
class Ficha < ApplicationRecord 
belongs_to :user 
belongs_to :usuario 
end 

class Usuario < ApplicationRecord 
belongs_to :user 
has_one :ficha, :dependent => :destroy 
end 

는 사용자 선호도 컨트롤러입니다 : 여기

내 모델입니다

class FichasController < ApplicationController 
     before_action :authenticate_user! 
     def index 
     end 

     def show 
     @ficha = Ficha.find(params[:id]) 
     end 

     def new 
     @usuario = Usuario.find(params[:usuario_id]) 
     if @usuario.ficha.nil? 
      @ficha = @usuario.build_ficha 
     else 
      flash[:error] = "Ya tienes una ficha" 
     end 
     end 

     def create 
     @usuario = Usuario.find(params[:usuario_id]) 

     @ficha = @usuario.build_ficha(ficha_params) 
     if @ficha.save 
      redirect_to @usuario, :notice => "Your ficha has been successfully created." 
     else 
      render :action => 'new' 
     end 
     end 

     def edit 
     #@ficha = Ficha.find(params[:id]) 
     end 

     def update 
     @ficha = Ficha.find(params[:id]) 

      if @ficha.update(ficha_params) 
       redirect_to @ficha 
      else 
       render 'edit' 
      end 
     end 

     def destroy 

     @usuario = Usuario.find(params[:usuario]) 
     @ficha = @usuario.fichas.find(params[:id]) 
     @ficha.destroy 

     redirect_to fichas_path 
    end 

    private 
     def ficha_params 
     params.require(:ficha).permit(:name, :age, :doc, :docnum, :estadocivil, :country, :street, 
     :direction, :municipal, :zipcode, :tel1, :tel2, :time, :redes, :estudios, :profession, 
     :laboral, :discapacity, :percent, :derivado1, :derivado2, :derivacion, :nombredelprofesional, 
     :observaciones, :conocio, :signature, :date, :term) 
     end 
    end 

있습니까 나는 창조 잘못 어딘가에 가고 컨트롤러에있는 ficha? usuario 모델에서 after_create를 사용하여 개체를 생성하는 것이 더 좋을까요?

도움을 주시면 감사하겠습니다. 감사!

답변

1

예, 올바른 방향으로 가고 있습니다. @ficha 개체가 저장되지 않은 경우 유효성 검사 오류 또는 적절하게 연결되지 않았기 때문일 수 있습니다.

체크 아웃 당신이 당신의 @ficha 개체에 연결된 모든 오류가 있는지 확인하려고을 저장 후 console를 삽입하여, 이러한 유형의 문제를 해결하는 방법을 배울 수 debugging with the console 명령을 사용합니다.

웹 콘솔은 byebug와 비슷하지만 브라우저에서 실행됩니다. 페이지를 개발중인 경우 보기 또는 컨트롤러의 컨텍스트에서 콘솔을 요청할 수 있습니다. 콘솔은 HTML 콘텐츠 옆에 렌더링됩니다. 4.1 콘솔

모든 컨트롤러 동작 또는보기 내부에서 콘솔 메서드를 호출하여 콘솔을 호출 할 수 있습니다. 레일 여기에 4.2.1

난 당신이 'accepts_nested_attributes_for'사용하는 것이 표시되지 않습니다에

+0

처럼 UsuariosController에서 이러한

class Ficha < ApplicationRecord belongs_to :user belongs_to :usuario end class Usuario < ApplicationRecord belongs_to :user has_one :ficha, :dependent => :destroy accepts_nested_attributes_for :ficha end 

또한 당신이 허가 ficha_attributs을 시도하는 http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

에 대해 읽기,의 본질적인 부분을 포함하는 것이 좋습니다 여기에 대한 대답과 참조 용 링크를 제공하십시오. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [리뷰에서] (리뷰/저품절 게시물/18115302) – Alisson

1

. 이 링크는 질문에 대답 수 있지만이

private 
    def usuario_params 
    params.require(:usuario).permit(:name, :age, :doc, :docnum, :estadocivil, :country, :street,:direction, :municipal, :zipcode, :tel1, :tel2, ficha_attributes: [# Write ficha attributes you want save]) 
    end