I have two tables:
- projects
- lines
lines has a foreign key constraint to projects.id
When I''m creating a new line object, the database fails on insert with
the following error:
"PGError: ERROR: null value in column "project_id" violates
not-null
constraint"
My code looks like this:
def create_lines
@project = params[:id]
@line = Line.new(params[:line])
if @line.save
flash[:notice] = ''Lines was successfully created.''
redirect_to :action => ''list''
else
render :action => ''new''
end
end
Here''s the template:
<%= form_tag :action => ''create_lines'', :id =>
@project %>
<table>
<% while @count < @line_qty %>
<tr>
<td><%= text_field("line", "partno",
"size" => 20) %></td>
<td><%= text_field("line", "qty",
"size" => 20) %></td>
<td><%= text_field("line", "target_price",
"size" => 20) %></td>
<td><%= text_field("line", "condition",
"size" => 20) %></td>
</tr>
<% @count += 1 %>
<% end %>
<tr>
<td colspan="4"><%= submit_tag(" ADD LINES
") %></td>
</tr>
</table>
<%= end_form_tag %>
Any idea why it doesn''t pickup the parent id ?
/mich
--
Posted via http://www.ruby-forum.com/.
mich wrote:> > I have two tables: > > - projects > - lines > > lines has a foreign key constraint to projects.id > > When I''m creating a new line object, the database fails on insert with > the following error: > > "PGError: ERROR: null value in column "project_id" violates not-null > constraint" > > My code looks like this: > > def create_lines > @project = params[:id] > @line = Line.new(params[:line]) > if @line.save > flash[:notice] = ''Lines was successfully created.'' > redirect_to :action => ''list'' > else > render :action => ''new'' > end > end > > Here''s the template: > > <%= form_tag :action => ''create_lines'', :id => @project %> > <table> > <% while @count < @line_qty %> > > <tr> > <td><%= text_field("line", "partno", "size" => 20) %></td> > <td><%= text_field("line", "qty", "size" => 20) %></td> > <td><%= text_field("line", "target_price", "size" => 20) %></td> > <td><%= text_field("line", "condition", "size" => 20) %></td> > </tr> > > <% @count += 1 %> > <% end %> > <tr> > <td colspan="4"><%= submit_tag(" ADD LINES ") %></td> > </tr> > </table> > <%= end_form_tag %> > > Any idea why it doesn''t pickup the parent id ? > > /mich >Either I''m missing something here, or you really don''t assign a project to the line. The params[:line] you''re using to create a new Line doesn''t include a project. I don''t know how you''re interface is set up, but either include a field for the project (usually a select), or add "@line.project = @project" between the save and new statements of the line. There is no need for the @project and @lines variables in the create_lines method to be isntances variables BTW. You can remove the @''s.
Wiebe Cazemier wrote:> Either I''m missing something here, or you really don''t assign a project > to > the line. The params[:line] you''re using to create a new Line doesn''t > include a project. > > I don''t know how you''re interface is set up, but either include a field > for > the project (usually a select), or add "@line.project = @project" > between > the save and new statements of the line.Beautiful - that did the trick. Pretty obvious, it seems now ;)> There is no need for the @project and @lines variables in the > create_lines > method to be isntances variables BTW. You can remove the @''s.That makes sense, thanks. However, I still seem to have issues inserting the rows. As you can see from my code snippets, I''d like to insert several line items.. <% while @count < @line_qty %> <tr> <td><%= text_field("line", "partno", "size" => 20) %></td> <td><%= text_field("line", "qty", "size" => 20) %></td> <td><%= text_field("line", "target_price", "size" => 20) %></td> <td><%= text_field("line", "condition", "size" => 20) %></td> </tr> <% @count += 1 %> <% end %> How do I tell the create_lines action to process all the lines, and also how do I send multiple lines, with multiple items to the controller ? Thanks in advance, /mich -- Posted via http://www.ruby-forum.com/.
On Thursday 06 April 2006 22:07, mich wrote:> However, I still seem to have issues inserting the rows. As you can see > from my code snippets, I''d like to insert several line items.. > > <% while @count < @line_qty %> > > <tr> > <td><%= text_field("line", "partno", "size" => 20) %></td> > <td><%= text_field("line", "qty", "size" => 20) %></td> > <td><%= text_field("line", "target_price", "size" => 20) %></td> > <td><%= text_field("line", "condition", "size" => 20) %></td> > </tr> > > <% @count += 1 %> > <% end %> > > How do I tell the create_lines action to process all the lines, and also > how do I send multiple lines, with multiple items to the controller ? > > Thanks in advance, > > /mich >Hmm, that''s going to be a bit difficult to explain. I have a similair need in an app I''m making. What I did was use hashes. In your view, you will have to make a hash, "lines" for example, with "line.id.to_s" as key. You can then supply it to a text_field_tag like so: text_field_tag("lines[#{line.id}]", rest_of_options) The object "line" is a parameter of a block (is that called a parameter? The thing between |''s?) for example, when iterating over a collection of lines. This way, you can store a collection of fields in a hash, which you can unpack again in your controller. I know this may be of little help, but as I said, it''s going to be a little difficult to explain. Also, I''d need more info on your app to give accurate help, but that would most likely mean a lot of work for me. I do need time to work on my own app, you see :)