如何设置一个列值:在创建新项目时使用表格的位置为该项目的id:
我有一个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
这只是控制器的一个片段。
如果你能指出我正确的方向,我将不胜感激。
您可以修改您的列表模式是这样的:
list.rb
class List < ApplicationRecord
after_create :set_position
.... existing model code ...
private
def set_position
self.update_attribute(:position, self.id)
end
end
当我在ListsController中放置'after_create:set_position'时它不喜欢它 – samando
什么是错误? – AytanLeibowitz
**对于ListsController,未定义的方法'after_create':Class您的意思是? after_action ** – samando
是位置需要由最终用户对UI提供?或者你是否希望在创建模型时将位置接受在表单中? 如果没有,那么你可以在模型的after_create回调中将id分配给位置。 –
@NarenSisodiya如何将id分配给after_create中的位置? – samando
迟到了...... AytanLeibowitz的回答是正确的。 –