我是Ruby on Rails的新手,想要做以下事情:
我有一个用户故事列表,按位置使用jQuery sortable排序。这一切都很好。问题是,当我创建一个新的userstory时,position设置为nil。我想要做的是在列表的按钮中添加一个新的用户故事。如果有以下几点:
我的控制器看起来像这样:
def create
@userstory = Userstory.new(userstory_params)
respond_to do |format|
if @userstory.save
format.html { redirect_to userstories_path, notice: 'Userstory was successfully created.' }
else
format.html { render :new }
end
end
端
感谢您的帮助!
答案 0 :(得分:1)
使用maximum方法从数据库中检索position
字段的最大值。
在before_create
模型中添加Userstory
回调,如下所示:
class Userstory < ActiveRecord::Base
before_create :set_position ## Adding callback
private
def set_position
## max_position will be set to maximum value of `position` field from userstories table
## max_position would be set as "nil" when userstories table is empty
max_position = Userstory.maximum(:position)
self.position = max_position.nil? ? 1 : max_position+1
end
end
EXTRA POINTER:目前,您的模型名称Userstory
不符合 Rails惯例。您应该考虑将其重命名为UserStory
和相关文件名user_story.rb
,并且不要忘记将表名称设为user_stories
。
答案 1 :(得分:0)
def create
@userstory = Userstory.new(userstory_params)
@userstory.position = Userstory.order("position DESC").first.position + 1
respond_to do |format|
if @userstory.save
format.html { redirect_to userstories_path, notice: 'Userstory was successfully created.' }
else
format.html { render :new }
end
end
end
以上代码可以解决您的问题。
答案 2 :(得分:0)
您可以向Userstore模型添加回调
class Userstory < ActiveRecord::Base
before_create :set_position
private
def set_position
self.position = Userstory.any? ? Userstory.last.position : 1
end
end