2017-11-17 133 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

相关问题