gpt4 book ai didi

mysql - 从 Controller 在数据库中添加列

转载 作者:行者123 更新时间:2023-11-29 06:21:46 25 4
gpt4 key购买 nike

我想通过 Controller 在 mysql 表中添加一列。用户完成一个表单,当他发送它时,它会用表单中的信息创建一个新的列(而不是行)。我该怎么做?

最佳答案

it create new column

不要

您的数据库是神圣不可侵犯的,动态更改它就像根据某些用户的请求动态更改汽车一样。汽车有四个轮子、发动机和座椅。您可以更改颜色、轮胎等...但不能更改基本要素。

Web 应用程序也是如此 - 您不应该更改系统的基本结构。当然,您可以更改它的各个方面(用户头像等),但系统的底层基础(db 模式)应该保持在任何更改之上。


应该做的是通过一组紧密的模型维护您的数据库保真度,让您围绕向您提供的数据。

例如……

The user complete a form and when he send it, it create new column

一个更好的解释方法是使用 user story .

我会根据您的情况做出以下推测:

A user wants to add a new project to his portfolio. He fills out the form to explain what the project will be and adds a number of extra fields specific for that project.

我想你问的是“额外字段”部分......

您必须记住,Rails 是建立在关系数据库之上的:

enter image description here

这意味着您拥有模型提供的灵 active ,允许您的用户添加操作尽可能多的关联他们需要的数据。

他们添加到系统的数据可以具有任何名称和任何结构,只要您在系统本身内提供该功能...

#app/models/user.rb
class User < ActiveRecord::Base
has_many :projects
has_many :specialized_fields, through: :projects
end

#app/models/project.rb
class Project < ActiveRecord::Base
belongs_to :user
belongs_to :specialized_field
accepts_nested_attributes_for :specialized_field
end

#app/models/specialized_field.rb
class SpecializedField < ActiveRecord::Base
has_many :projects
has_many :users, through: :projects
end

根据我上面的例子,

  • User 可以创建一个Project
  • 项目 可以有专用字段(在标准字段之上)
  • 用户可以向模型添加专门的字段

因此您可以执行以下操作:

#app/controllers/projects_controller.rb
class ProjectsController < ApplicationController
def new
@project = current_user.projects.new #-> assuming you're using Devise
@specialized_field = @project.build_specialized_field
end

def create
@project = Project.save project_params
@project.save
end

private

def project_params
params.require(:project).permit(:name, :start_time, :end_time, specialized_field_attributes: [:name, :value])
end
end

形式可以如下:

#app/views/projects/new.html.erb
<%= form_for @project do |f| %>
<%= f.text_field :name %>
<%= f.fields_for :specialized_field do |s| %>
<%= s.text_field :name %>
<%= s.text_field :value %>
<% end %>
<%= f.submit %>
<% end %>

关于mysql - 从 Controller 在数据库中添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32965904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com