2017-11-17 131 views
0

我有一個List控制器/ model/whatever-you-would-call-it,當我創建一個帶有窗體,我想將:position列設置爲其id:id。我不知道我會怎麼做。如何設置一個列值:在創建新項目時使用表格的位置爲該項目的id:

順便說一下,這個位置的類型是Integer。

我的想法:

  • 在控制器:lists_controller.rb,在新的方法,或者也許是創建方法,添加一些代碼。
  • 在設置其他屬性時在表單中的某個位置,潛入那個位置的小狗。 (我只是想在創建新列表時將位置設置爲id,雖然沒有更新)
  • 在模型中自己設置它。 (我不想設定:位置爲:ID,當我更新/編輯,(只有當創建新的),則該項目,所以我敢肯定,這是行不通的)

下面是一些代碼,可能幫助:

_form.html.erb

<%= form_with(model: @list) do |form| %> 
    <div class='addField'> 
    <%= form.text_field :name, placeholder: "Name" %> 
    <%= form.text_field :description, placeholder: "Description" %> 
    <%= form.check_box :private,class: 'check_box' %> 
    </div> 
    <div class='addLabel'> 
    <div> 
     <%= form.label :name %> 
    </div> 
    <div> 
     <%= form.label :description %> 
    </div> 
    <div> 
     <%= form.label :private %> 
    </div> 
    </div> 
    <div id='submitNew'> 
    <%= form.submit 'Done', :class => 'btn btn-primary' %> 
    </div> 
<% end %> 

lists_controller.rb

class ListsController < ApplicationController 

    def new 
    @list = List.new 
    end 

    def create 
    @list = List.new(list_params) 

    if @list.save 
     redirect_to @list 
    else 
     render 'new' 
    end 
    end 

    private 
    def list_params 
    params.require(:list).permit(:name, :description, :private) 
    end 
end 

這只是控制器的一個片段。

如果你能指出我正確的方向,我將不勝感激。

+1

是位置需要由最終用戶對UI提供?或者你是否希望在創建模型時將位置接受在表單中? 如果沒有,那麼你可以在模型的after_create回調中將id分配給位置。 –

+0

@NarenSisodiya如何將id分配給after_create中的位置? – samando

+0

遲到了...... AytanLeibowitz的回答是正確的。 –

回答

2

您可以修改您的列表模式是這樣的:

list.rb

class List < ApplicationRecord 
    after_create :set_position 
    .... existing model code ... 

    private 
    def set_position 
    self.update_attribute(:position, self.id) 
    end 
end 
+0

當我在ListsController中放置'after_create:set_position'時它不喜歡它 – samando

+0

什麼是錯誤? – AytanLeibowitz

+0

**對於ListsController,未定義的方法'after_create':Class您的意思是? after_action ** – samando

相關問題