2013-10-23 1 views
0

devise 인증이 설치된 회사 모델이 있습니다. 그것은 has_many : jobs입니다.개체를 폼에 바인딩하기 Ruby on Rails 컨트롤러에서보기로 인스턴스 보내기

내 목표는 내가 기존 회사로 로그인 할 때 작업 기록을 성공적으로 만들고 내 mongoid 데이터베이스에 올바르게 링크되도록하는 것입니다.

하나의 양식에서 여러 모델을 업데이트하고 싶습니다.

나는

accepts_nested_attributes_for :jobs, allow_destroy: true 

설정하는 방법을 알고 있지만 나는 중첩 된 형태로 내 컨트롤러에서 해당 인스턴스를 전달하는 데 문제가 무엇입니까? 내 회사의 컨트롤러

나는 내 양식

<%= simple_form_for @company do |f| %> 
    <%= f.simple_fields_for :jobs do |j| %> 
    <%= j.input :title %> 
    <%= j.input :description %> 
    <% end %> 
    <%= f.button :submit %> 
<% end %> 

내가 현재 회사의 작업이보기에 반대하고 올바르게 게시 보내 어떻게 여기이

def new 
    @company = current_company.jobs.new() 
    end 

    def create 
    #the actual create process where the params from the forms got sent here 
    @company = current_company.jobs.new(params[:company]) 
    end 

가지고? 현재 양식을 제출할 때 빈 작업 개체가 생성됩니다. 값은 거기에 없습니까?

회사 모델에 대한 인증은 많은 것을 복잡하게 만든다고 생각합니다. 나는 인증없이 다른 시간에 그것을했다.

그때 내가 '당신은 이미 로그인 한'얻고있는 회사로 로그인하고 경우에 나는 서명하지하고 있다면이 고안 등록 리디렉션하고 내가이

def new 

@company = Company.new 

end 

def create 
    #the actual create process where the params from the forms got sent here 
    @company = Company.new(params[:company]) 
end 

에 컨트롤러를 변경하는 경우 경로.

+0

params 객체를 파라미터가오고있다? 'puts params.inspect'을 컨트롤러에 넣습니다. – AdamT

+0

@ Jngai1297 문제는 컨트롤러와 뷰에 있습니다. 새로운 작업 및 생성 작업에서는 회사 개체가 아닌 작업 개체를 초기화합니다. '@ company'는'company_id = current_company.id'를 가진 Job 모델의 객체입니다. 따라서보기에서는 fields_for가 필요하지 않습니다. 그리고 당신은 결코이 코드에 대해'params [: company]'값을 얻지 못할 것입니다. –

+0

@ManojMonga 그 회사의 ID로 일자리를 만들고 싶습니다. 그렇다면 제 작업 컨트롤러에서해야합니까? 그래서'company_id = current_company.id'와 동일한 작업 객체를 가질 수 있습니까? 컨트롤러 코드를 작업 컨트롤러로 옮깁니 까? – Jngai1297

답변

0

방금 ​​구축 할 필요가 없습니다() 대신 새로운() :

def new 
    @company = current_company 
    @company.jobs.build() 
end 

def create 
    #the actual create process where the params from the forms got sent here 
    @job = current_company.jobs.build(params[:company][:job_attributes]) 

    if @job.save 
    # redirect somewhere 
    else 
    render :new 
    end 
end