[英]Rails 4 - Assigning values for a row in an associated table in a form
这里是Rails的初学者,对于我的项目,我需要创建一个包含名字,中间名,姓氏和护照的客户。 我还有另一个表,称为“护照”,用于存储护照。 我希望能够添加与客户关联的护照号码。 以下是相关的代码段:
客户控制人
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
护照管制员
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视图放置在地址视图文件夹下,然后将其呈现为client#create,client#update等视图的局部视图。 因此,例如:
#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 %>
然后在您的地址视图文件夹中
#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 %>
然后在client#new上:
#client/new.html.erb
<%= render "clients/form" %>
<%= render "addresses/form" %>
另外,请确保您的address#create方法中有一些内容可以引用用户创建的内容,以便将其保存在数据库中。 另外,请不要大写您的属性名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.