Ruby on Rails
Thursday, April 30, 2015
An update:
In the new view it turned out I neededSo plural "members". Similar, in the params in the controller I changed member_attributes to members_attributes, again the plural form.
Also, in def create in the organizations controller, I removed the line:
Having done all this, I now get a flash error message on submission of the form:
The server log:
Next, if I remove the validates :organization_id line from the member model, the form works fine. It saves the organization, the member, as well as the organization_if for the member. However, I of course need the model validation as protection.
Any idea how I should move forward?
Op woensdag 29 april 2015 23:15:28 UTC+2 schreef nic...@gmail.com:
-- In the new view it turned out I needed
<%= f.fields_for :members do |p| %>
Also, in def create in the organizations controller, I removed the line:
@member = @organization.members.build(organizationnew_params)
Having done all this, I now get a flash error message on submission of the form:
The form contains 1 error:
* Members organization can't be blank
The server log:
The member model includes:
Processing by OrganizationsController#create as HTML
Parameters: {"utf8"=>"✓", "organization"=>{"org_name"=>"sadfsdaf", "phone"=>"sdfds", "members_attributes"=>{"0"=>{"username"=>
"fsfdsfsad", "email"=>"sfdsdf@sfsdf.com", "fullname"=>"sdfds", "password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]"}}}, "admin"=>"true", "commit"=>"Sign up"}
(0.5ms) begin transaction
Member Exists (0.4ms) SELECT 1 AS one FROM "members" WHERE LOWER("members"."email") = LOWER('sfdsdf@sfsdf.com') LIMIT 1
Member Exists (0.2ms) SELECT 1 AS one FROM "members" WHERE LOWER("members"."username") = LOWER('fsfdsfsad') LIMIT 1
Organization Exists (0.3ms) SELECT 1 AS one FROM "organizations" WHERE LOWER("organizations"."org_name") = LOWER('sadfsdaf') LIMIT 1
Organization Exists (0.2ms) SELECT 1 AS one FROM "organizations" WHERE LOWER("organizations"."phone") = LOWER('sdfds') LIMIT 1
(0.2ms) rollback transaction
Rendered shared/_error_messages.html.erb (1.9ms)
belongs_to :organization
validates :organization_id, presence: true # There are other validations as well, but I don't think they matter for this question.
def send_activation_email
MemberMailer.account_activation(self).deliver_now
end
Next, if I remove the validates :organization_id line from the member model, the form works fine. It saves the organization, the member, as well as the organization_if for the member. However, I of course need the model validation as protection.
Any idea how I should move forward?
Op woensdag 29 april 2015 23:15:28 UTC+2 schreef nic...@gmail.com:
I have two models each with their own resources: Organizations and Members. An organization has multiple members and a member is only a member to one organization.
How can I create a simple nested form that signs up a new organization as well as one member for that organization?
My current attempt is below. On submitting the form, this however generates the error message
unknown attribute 'org_name' for Member, which I don't get especially since org_name is a column within the Organization model and not the Member model.
Organization model
has_many :members, dependent: :destroy
accepts_nested_attributes_for :members, :reject_if => :all_blank, :allow_destroy => true
Member model
belongs_to :organization
Organizations controller
def new
@organization = Organization.new
@member = @organization.members.build
end
def create
@organization = Organization.new(organizationnew_params )
@member = @organization.members.build(organizationnew_params )
if @organization.save && @member.save
@member.send_activation_email #Will Rails be able to get to this method? The send_activation_email method exists in multiple models and Rails should here use the version from the Member model.
flash[:success] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
end
def organizationnew_params
params.require(:organization).permit (:org_name,
:phone,
member_attributes: [:email,
:username,
:admin,
:password,
:password_confirmation
])
endOrganizations new view
<%= form_for(@organization) do |f| %>
<%= f.text_field :org_name, %>
<%= f.text_field :phone %>
<%= f.fields_for :member do |p| %>
<%= p.text_field :username %>
<%= p.email_field :email %>
<%= p.password_field :password %>
<%= p.password_field :password_confirmation %>
<%= hidden_field_tag :admin, true %>
<% end %>
<%= f.submit "Sign up", class: "formbutton btn btn-default" %>
<% end %>What am I doing wrong? How can I create a simple nested form?
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/f6c7f52b-46f6-42f9-83f5-9fc1a886f0f3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment