簡體   English   中英

使用belongs_to Association的Rails表單

[英]Rails Form with belongs_to Association

我對Rails很新,所以這可能是一個明顯的問題,如果是這樣,我道歉。

我正在嘗試創建一個用於創建User記錄的表單,該表單具有與Team模型的belongs_to關聯。 到目前為止我所做的是以下......

<% form_for @user, url: {action: "create"} do |f| %>
  <%= f.text_field :name %>
  <%= f.text_field :email %>

  <% f.fields_for :team do |team| %>
    <%= team.collection_select(:team_id, Team.all, :id, :name) %>
  <% end %>
  <%= f.submit %>
<% end %>

這似乎工作得很好,但在創建用戶記錄時,我遇到了麻煩。

def create
  @team = Team.find(params[:user][:team][:team_id])
  @team.users.create(user_params)
  # Ignoring error checking for brevity
end

def user_params
    params.require(:user).permit(:name, :email)
end

params現在包含team_id的字段,該字段不是User模型的屬性,因此創建失敗。 我不確定如何解決這個問題,更不用說這是否是解決這個問題的合適方法。 任何建議將不勝感激!

歡迎來到Rails :)

如果目標是確保每個用戶都能成為團隊的一員,那么以這種方式進行關聯的邏輯就沒有問題。

首先,您需要確保team_id存在於用戶模型中。 而且,正如Doon建議的那樣,除非您想要與團隊模型進行交互並在同一表單中進行更改,否則您不需要fields_for

首先創建一個遷移rails g migration add_team_to_user team:belongs_to

在您的遷移中使用belongs_to將添加一個引用,您可以在此處了解: http//edgeguides.rubyonrails.org/active_record_migrations.html

然后遷移數據庫bundle exec rake db:migrate

並重新啟動您的服務器 然后改變你的形式:

<% form_for @user, url: {action: "create"} do |f| %>
  <%= f.text_field :name %>
  <%= f.text_field :email %>
  <%= f.collection_select(:team_id, Team.all, :id, :name) %>

  <%= f.submit %>
<% end %>

這很容易使用gem https://github.com/plataformatec/simple_form

協會

為了處理關聯,Simple Form可以生成選擇輸入,一系列無線電按鈕或復選框。 讓我們看看它是如何工作的:想象一下你有一個屬於公司的用戶模型和has_and_belongs_to_many角色。 結構將類似於:

class User < ActiveRecord::Base
  belongs_to :company
  has_and_belongs_to_many :roles
end

class Company < ActiveRecord::Base
  has_many :users
end

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users
end

現在我們有了用戶表單:

<%= simple_form_for @user do |f| %>
  <%= f.input :name %>
  <%= f.association :company %>
  <%= f.association :roles %>
  <%= f.button :submit %>
<% end %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM