Ruby on rails 如何将用户对表单的响应保存到数据库

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表中。我创建

我有一个保存用户设置的表单,其中有一部分,用户订购了两个列表,其中列出了他们最高兴和最不高兴的事情。例如:

什么因素最重要

薪金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