我想從控制器的mysql表中添加一列。用戶完成一個表單,當他發送一個表單時,它會創建一個新的列(不是行),並在表單中包含信息。我怎樣才能做到這一點?從控制器的數據庫中添加列
回答
它創建新列
不要。
您的數據庫是神聖的,動態改變它就像是根據某些用戶的請求動態改變汽車。一輛車有四個輪子,發動機和座椅。你可以改變的顏色,輪胎等,但不是基本面。
這與網絡應用程序是一樣的 - 你不應該改變你的系統的基本結構。當然,你可以改變它的各個方面(用戶頭像等),但系統的底層基礎(db
模式)應該保持在任何改變之上。
什麼你應該做的是通過一套嚴密的Models
維護數據庫的保真度,從而允許您創建一個動態體驗各地你已經提供的數據。
例如...
用戶填寫一份表格,當他送它,它創建新列
一個更好的方式來解釋,這將是使用user story
。
我會猜測你的情況如下:
用戶希望將新項目添加到他的投資組合。他填寫表格來解釋項目的內容,併爲該項目增加了一些額外的字段。
我想你問的是「額外域」的一部分......
你要記住的Rails是建立在一個關係數據庫的頂部:
這意味着您可以通過您的型號提供的靈活性來授予您的用戶加和處理儘可能多的關聯數據。
它們添加到系統中的數據可以有任何名& 任何結構,只要您提供系統本身內的功能...
#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
Project
可以有specialized fields
(高於標準字段)User
可以添加專業領域的模型
因此,你可以做到以下幾點:
#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 %>
爲什麼要通過控制器向數據庫添加新列?這不應該是這樣的 - 一般來說,我不能想到爲什麼要這樣做的唯一原因。這聽起來非常規並且違背了設計原則。
如果您添加更多關於需要什麼以及您打算做什麼的信息,我非常確定我們可以制定出替代解決方案。 (我敢打賭,你試圖做的事情可以通過多對多的關係或類似的方式來實現)。發佈更多信息,看看我們能做些什麼。
但作爲答案和解決方案,我會說它不應該是必需的。
你爲什麼要這樣做?數據庫設計是應用程序開發的一部分,因此您需要是決定行的一個因素。當用戶輸入數據時,會有一大堆可能出錯的事情(黑客,無效值......),這可能會影響整個數據庫。這不值得冒這個風險。
如果您想要靈活的模式,可以將散列存儲在特定的字段中。 例如,您有一個extra_data
字段,它是一個散列。然後在你的表單中,你可以輸入,input_name
和input_value
這將去散列。通過這種方式,您可以爲同一列獲得更靈活的值,而且不需要更改數據庫模式。
- 1. 通過laravel 4.2中的控制器添加列到數據庫
- 2. 通過控制器在數據庫中多次添加陣列
- 3. 通過rails控制檯爲數據庫中的列添加值
- 4. 如何從rails控制檯向數據庫添加數據
- 5. 從數據庫表中的特定列中添加數據
- 6. 添加控制器數據庫錯誤在ASP.NET MVC 4
- 7. 從數據庫讀取列並添加到列中的數組
- 8. C#從數據庫添加數據表中的列
- 9. 控制器中的數據庫事務
- 10. 控制器中的asp.net數據庫
- 11. 從數據庫2添加列到Database1
- 12. 添加到列從數據庫
- 13. ASP.NET - 控制器無法從數據庫中檢索數據
- 14. 將數據從數據庫插入到微控制器中android
- 15. 參數化控制器動作中的數據庫列名
- 16. 如何從數據庫第一個EF模型添加MVC3控制器?
- 17. Android數據庫添加列
- 18. Rails數據庫添加列
- 19. cakephp將加密數據從控制器發送到庫
- 20. 如何從控制器打印控制器中的數據集
- 21. 動態控制從數據庫數據
- 22. 如何將控制器變量添加到軌道中的數據庫行?
- 23. 添加從數據庫到數據庫的表和列的列表
- 24. 從Laravel控制器中的AJAX發佈請求中添加數據到MySQL
- 25. 添加或從數據庫
- 26. 通過控制器的數據在表格中添加行
- 27. 將數據添加到控制器中的角度形式
- 28. 從控制器構造器中選擇數據庫
- 29. 加載控制器cakephp中的數據庫表
- 30. 添加視圖控制器陣列
不好的壞請求 –
您是否已將您的列作爲強參數添加到您的控制器中? – akbarbin
@RichPeck爲什麼? @ MuhamadAkbarBinWidayat No. – Sleed