0

好的,我在这里遗漏了一些明显的东西,但是这里有:

我用 Devise 创建了一个用户

我创建了一个user_goals有四个目标的模型

user_goal_id在用户表中创建了一个字段。

在我的用户注册表单中,我想展示collection_select四个可能的目标中的一个,并在创建用户时将所选目标的 id 放入 users 表中。

我不知道该怎么做。具体来说,我不知道如何将user_goals选定的 id写入user_goal_idusers 表中的字段。

编辑:

我是否需要创建一个 user_goals 控制器,或者我可以将控制器逻辑放在 users_controller 中吗?

4

2 回答 2

1

请提出准确的问题,这太笼统了。给出你的代码的某些部分并提出一些精确的问题,如果你真的不明白你在问什么,试图回答你的人也不会明白。请查看 Rails 指南,有一个关于 ActiveRecord 关系(包装外键)的好章节并做一些教程。一旦你了解它是如何工作的,如果你需要关于错误消息或一段代码的精确帮助,请回来提出你的问题,我相信你会得到快速的答案:)

于 2013-03-20T22:58:50.507 回答
1

好的,事实证明这真的很简单。您不需要在控制器或模型中执行任何逻辑。您只需在注册表中执行以下操作:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>

上面的行只是form_for创建表单的行。脚手架,或者在这种情况下,Devise 将创建它。记得do |f|最后。

<%= devise_error_messages! %>
    <%= f.label :Whats_your_goal? %><br />
    <%= f.collection_select :user_goal_id, UserGoals.all, :id, :name, { :include_blank => ""}%>

第一行只是字段的标签

第二行是下拉菜单。f.collection_select告诉您的表单生成器这将是一个选项的下拉列表。

:user_goal_id是用户表中我要记录表中foreign key目标的字段的名称user_goals

UserGoals.all是我希望下拉列表从中填充的数据库表的名称。.all说我想要那个数据库表中的所有项目

我相信:id,通过它们的数据库 ID 号或主键提取项目,并:name说给我表的名称列,而不是描述或其他东西。

最后,{ :include_blank => "" }只需在下拉列表顶部创建一个空白区域,因此没有默认选择。如果需要,您还可以在两者之间添加消息""

我很难找到一个简单的解释,可能是因为它太基础了。希望其他人会发现这很有用。

于 2013-03-21T16:13:43.120 回答