繁体   English   中英

Rails 4-为表单中的关联表中的行分配值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM