这里是 Rails 的初学者,对于我的项目,我需要创建一个包含名字、中间名、姓氏和他们的护照等内容的客户。我有另一个名为 passports 的表,用于存储护照。我希望能够添加与客户关联的护照号码。以下是相关的代码片段:
客户端 Controller
def new
@client = Client.new
end
def create
@client = Client.new(client_params)
if @client.save
redirect_to root_url
else
render 'new'
end
end
private
def client_params
params.require(:client).permit(:firstname, :middlename, :lastname, :PresentAddress)
end
end
护照 Controller
def new
@passport = Passport.new
end
def create
passport = Passport.new(passport_params)
if @passport.save
flash[:notice] = "Passport saved"
else
flash[:notice] = "Passport not saved"
end
end
private
def passport_params
params.require(:passport).permit(:idnumber, :country)
end
end
客户模型
has_one :passport, foreign_key: "client_id"
护照模型
belongs_to :client
客户端的迁移文件
create_table :clients do |t|
t.string :firstname
t.string :middlename
t.string :lastname
end
护照的移民文件
create_table :passport do |t|
t.string :passport
end
/clients/_form.html.erb
<%= form_for(@client) do |f| %>
<%= f.label :"First Name"%>
<%= f.text_field :firstname%>
<%= f.label :"Middle Name"%>
<%= f.text_field :middlename%>
<%= f.label :"Last Name"%>
<%= f.text_field :lastname%>
<%= f.submit "Create Client" %>
<% end %>
/passport/_form.html.erb
<%= form_for([@client, @client.passport.build]) do |f| %>
<%= f.label :"Passport ID Number" %>
<%= f.text_field :idnumber %>
<% f.submit "Create Passport" %>
<% end %>
/clients/new.html.erb
<%= render "clients/form" %>
<%= render "passports/new" %>
我希望能够以这种形式为客户创建护照并将其发送到我的 Postgres 数据库。我该怎么做呢?如果我遗漏任何其他信息,请告诉我。
编辑 - 现在更改为更简单的字段。还进行了修改以执行 ChiefrockaChris 建议的操作。
最佳答案
执行此操作的方法是将地址的#_form.html.erb View 放在地址 View 文件夹下,然后将其呈现为 client#create、client#update 等 View 中的部分 View 。例如:
#clients/_form.html.erb
<%= form_for(@client) do |f| %>
<%= f.label :"First Name"%>
<%= f.text_field :FirstName%>
<%= f.label :"Middle Name"%>
<%= f.text_field :MiddleName%>
<%= f.label :"Last Name"%>
<%= f.text_field :LastName%>
<%= f.label :"Present address"%>
<%= f.text_field :PresentAddress %>
<%= f.submit "Create Client" %>
<% end %>
然后在您的地址 View 文件夹中
#addresses/_form.html.erb
<%= form_for ([@client, @client.addresses.build]) do |f| %>
<%= f.label :"Street Name"%>
<%= f.text_field :street_name%>
<%= f.submit "Create Address" %>
<% end %>
然后在客户端#new:
#client/new.html.erb
<%= render "clients/form" %>
<%= render "addresses/form" %>
还要确保您的 address#create 方法中有一些内容将引用用户创建,以便将其保存在数据库中。 另外请不要将您的属性名称大写。
关于ruby-on-rails - Rails 4 - 为表单中关联表中的行分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887561/