【发布时间】:2016-12-08 13:18:59
【问题描述】:
我的欢迎页面上有一个用户表单。随着用户表单的提交,我想创建一个属于该用户的网站记录以及一个属于该网站的页面记录。
我正在尝试使用 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
我的路线如下...
# routes.rb
resources :users do
resources :websites do
resources :pages
end
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
最后是我的用户控制器...
# 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
我现在遇到的问题是用户名被保存为页面和网站名称等。我认为这是我的参数有问题。另外,我不确定如何将重定向设置为在创建页面后重定向到页面。
我已经玩了几个星期的各种配置,但我无法破解它。我不能强调我对自己在这里所做的事情知之甚少,真的很想得到一些帮助!
【问题讨论】:
-
所以您想自动创建它,或者用户将在表单中输入这些记录的详细信息?因为如果您使用嵌套字段,则意味着用户将输入详细信息。
-
嘿,我在修复了一些问题后刚刚更新了问题。我将 hidden_field 用于具有默认或生成内容的 fields_for 字段。该网站可以自动创建,但该页面包含一些用户生成的内容,我正在使用 JS 添加到该字段中。
-
那么为什么不使用回调来创建网站和页面呢?
-
我什至不知道什么是回调:) 你能解释一下这可能有什么帮助吗?顺便说一句,我刚刚用一些关于我的参数的额外信息更新了这个问题。
标签: ruby-on-rails ruby-on-rails-5