私はウェルカムページにユーザーフォームを持っています。ユーザーフォームが送信されると、そのユーザーに属するWebサイトレコードとそのWebサイトに属するページレコードを作成したいと考えています。深いネストされたRailsアソシエーションを1つのフォームで作成する
fields_forを使用しようとしていますが、正しくやっていることがわかりません。
# welcome.html.erb
<%= form_for @user do |f| %>
<div>
<%= f.text_field :name' %>
</div>
<div>
<%= f.email_field :email %>
</div>
<div>
<%= f.password_field :password %>
</div>
<div>
<%= f.fields_for :website do |website_fields| %>
<%= website_fields.text_field :name, value: 'Untitled website' %>
<% end %>
</div>
<div>
<%= f.fields_for :page do |page_fields| %>
<%= page_fields.text_field :name, value: 'Untitled page' %>
<%= page_fields.text_field :content, class: 'js-PageContentHiddenField', value: 'Page content' %>
<% end %>
</div>
<div>
<%= f.submit 'Create account' %>
</div>
<% end %>
ページコントローラは、次のようになり、次のように...
# pages_controller.rb
def welcome
@user = User.new
@website = @user.websites.new
@page = @user.websites.pages.new
end
私のルートは
# User model
has_many :websites, :dependent => :destroy
has_many :pages, through: :websites
accepts_nested_attributes_for :websites
accepts_nested_attributes_for :pages
# Website model
belongs_to :user
has_many :pages, :dependent => :destroy
# Page model
belongs_to :website
...モデルは次のようになり
# routes.rb
resources :users do
resources :websites do
resources :pages
end
end
...です
最後に私のユーザーコントローラ...
# User controller
def create
@user = User.new(shared_params)
@website = @user.websites.new(website_params)
@page = @website.pages.new(page_params)
if @user.save
auto_login(@user)
@redirect_to user_website_page_path
else
# redirect to wherever
end
end
private
def shared_params
params.require(:user).permit(:email, :password, :name)
end
def website_params
params.require(:user).permit(:name, :user_id)
end
def page_params
params.require(:user).permit(:name, :website_id)
end
私が今問題にしているのは、ユーザー名がページとウェブサイト名などに保存されているということです。私の考えは私の考えです。また、作成したページにリダイレクトするようにリダイレクトを設定する方法がわかりません。
私はこれまで数週間さまざまな構成で遊んできましたが、これを解読することはできません。私がここでやっていることがどれほどわかっているかわからない、本当に助けが大好きです!
あなたはそれを自動的に作成したいのですか、またはユーザーはそれらのレコードの詳細をフォームに入力しますか?ネストされたフィールドを使用すると、ユーザーが詳細を入力するためです。 – Deep
ちょっと、私はいくつかの問題を修正した後、質問を更新しました。私はhidden_fieldフィールドfields_forのデフォルトまたは生成されたコンテンツを使用しています。自動的にウェブサイトを作成することができますが、そのページにはJSでフィールドに追加するユーザー生成コンテンツがいくつかあります。 – colmtuite
なぜ、コールバックを使ってウェブサイトやページを作成してみませんか? – Deep