2015-05-12 54 views
1

我有一個項目,並添加服務,我通過項目ID的服務與項目:傳遞父值來簡單的形式

new_service_path(project: "#{@id}") 

我的服務控制器,然後查找項目:

def new 
    @service = Service.new 
    @project = Project.find(params[:project]) 
    @service.documents.build 
    end 

我可以在視圖中顯示項目,但我想將項目ID保存到服務記錄以創建關聯。我使用簡單形式:

simple_form_for @service do |f| 

與此代碼的形式:

<% if @project %> 
     <%= f.association :project, selected: @project.id %> 
    <% else %> 
     <%= f.association :project %> 
    <% end %> 

但是,如果我有一個項目,我想跳過與f.association和創建的選擇過程選擇框並簡單地將project_id添加到我的Service對象。

我該怎麼做?

回答

2

爲什麼不將項目設置爲控制器中的服務?

def new 
    @service = Service.new 
    @project = Project.find(params[:project]) 
    if @project 
     @service.project = @project 
    end 
    @service.documents.build 
    end 

那麼對於項目的形式就是:

<%= f.association :project %> 

不管怎麼說,你可以沿着項目ID傳遞到下一個路由,當您提交表單,如simple_form_for @service, :url => create_project_path(project: @project.id) do |f|,然後接受參數並設置在create方法協會:

def new 
    @service = Service.new 
    @project = Project.find(params[:project]) 
    @service.documents.build 
    end 

    def create 
    @service = Service.new 
    @project = Project.find(params[:project]) 
    if @project 
     @service.project = @project 
    end 
    # ... other logic 
    end 

然後,只需隱藏project場,就像你在你的疑問句做灰。

隱藏的輸入可能是另一種方法,但我不認爲這是最好的。