Ruby on rails 如何将用户对表单的响应保存到数据库
我有一个保存用户设置的表单,其中有一部分,用户订购了两个列表,其中列出了他们最高兴和最不高兴的事情。例如: 什么因素最重要 薪金5 余额4 增长3 额外津贴2 经理1 你对什么最满意 经理1 增长2 额外津贴3 余额4 薪金5 因此,用户可以将列表拖放到自己喜欢的位置,现在我需要对响应进行评分,将前面的数字相加,并保存前3名。在这种情况下,薪水10分,余额8分和额外津贴5分,增长率也有5分,但在第二个问题上得分较少 在此之后,用户单击submit,我想将其保存到user_topics表中。我创建了如下迁移:Ruby on rails 如何将用户对表单的响应保存到数据库,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一个保存用户设置的表单,其中有一部分,用户订购了两个列表,其中列出了他们最高兴和最不高兴的事情。例如: 什么因素最重要 薪金5 余额4 增长3 额外津贴2 经理1 你对什么最满意 经理1 增长2 额外津贴3 余额4 薪金5 因此,用户可以将列表拖放到自己喜欢的位置,现在我需要对响应进行评分,将前面的数字相加,并保存前3名。在这种情况下,薪水10分,余额8分和额外津贴5分,增长率也有5分,但在第二个问题上得分较少 在此之后,用户单击submit,我想将其保存到user_topics表中。我创建
class CreateUserTopics < ActiveRecord::Migration[5.0]
def change
create_table :user_topics do |t|
t.belongs_to :user
t.belongs_to :topic
t.timestamps
end
end
end
结束
我不知道应该在哪里创建和实现方法来执行逻辑和保存数据。有很多方法可以做到这一点 您还不清楚主题信息是如何在表单中收集并传递给控制器的。也许用户参数中的数据字段实际上与用户表中的列不对应 如果是这种情况,那么我要做的就是创建一个PORO,它接受用户参数并删除那些字段,处理它们并创建相关的UserTopic对象,然后返回用户参数,而不返回那些额外的字段。在将参数传递给User.create之前,用户控制器将调用此PORO对参数执行操作 如果是我,我会做一些不同的事情。我会保存用户提供的所有信息,而不是只保存前三个主题,然后每当我需要前三个主题时,我都会动态地进行计算。这样,如果您决定更改计算主题分数的方式,则无需让用户重新输入数据 要做到这一点,我要让UserTopic模型有一个快乐整数和一个重要性整数,然后用用户给出的分数将每个主题加入到每个用户中。您可能可以使用accepts_attributes_for的形式来完成这项工作,但要让它与排序两个列表的用户一起工作可能有点麻烦
然后,我在User类中有一个top_topicsamount=3方法,用于计算该用户的前n个主题。为了给出更准确的回答,我需要问一个问题:假设您已经以所需的任何形式保存了数据,那么您能给我一个例子说明将来如何更新它吗?我这样问是因为据我所知,这似乎更像是一个设计问题,而不是如何保存数据模型、结构等。因此,每当用户进入设置页面时,他们都可以更改项目的顺序,并且每次用户这样做时都需要更改。但他一次只能有3个热门话题,看看托比1克诺比的答案。
class UserTopic < ApplicationRecord
belongs_to :user
belongs_to :topic
end
<div class="actions">
<%= f.submit "Finished", class: 'button btn-standard' %>
</div>
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to root_path, notice: 'Your information has been updated!' }
else
format.html { render :core_info }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end