Hi,
I have a model that looks like this:
class Assessment < ActiveRecord::Base
...
set_table_name "SCG_Assessment"
set_primary_key "ID_"
validates_presence_of :Name, :Description, :Version
validates_length_of :Name, :maximum => 50
...
end
My setup is windows server 2003 R2, RoR 1.1.6, and SQL Server 2005.
When I intentionally enter a string that is greater than 50 characters,
the write to the database is still attempted, and the user sees an ugly
error like this:
ActiveRecord::StatementInvalid in AssessmentsController#create
DBI::DatabaseError: Execute
OLE error code:80040E57 in Microsoft OLE DB Provider for SQL Server
String or binary data would be truncated.
HRESULT error code:0x80020009
Exception occurred.: INSERT INTO SHAKERCG_Assessment ([Name],
[Version], [State], [Customer_ID_FK], [Description]) VALUES(''this is my
new assessment with a really long name.'', ''1'', NULL,
1, ''hello'')
RAILS_ROOT: ./script/../config/..
Application Trace | Framework Trace | Full Trace
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/abstract_adapter.rb:120:in
`log''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/sqlserver_adapter.rb:279:in
`insert''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1739:in
`create_without_callbacks''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:265:in
`create_without_timestamps''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/timestamp.rb:30:in
`create''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1718:in
`create_or_update_without_callbacks''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/callbacks.rb:253:in
`create_or_update''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1392:in
`save_without_validation''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/validations.rb:736:in
`save_without_transactions''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/transactions.rb:126:in
`save''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/abstract/database_statements.rb:51:in
`transaction''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/transactions.rb:91:in
`transaction''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/transactions.rb:118:in
`transaction''
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/transactions.rb:126:in
`save''
#{RAILS_ROOT}/app/controllers/assessments_controller.rb:35:in `create''
I want the user to see the flash[:notice] message in a <div> element
that I have created in the page template. Instead, they are directed to
this type of page. Because this is a legacy schema, the primary key and
table names must all be overriden. I don''t know this is happening
because of SQL Server, or because of not being able to use the RoR
naming conventions.
I also tried wrapping the save call around a begin/rescue block, hoping
to catch the exception (changing to a .save! vs. .save), but that
didn''t
seem to help either.
Any suggestions?
-Kevin
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
On Sun, 2007-01-28 at 16:57 +0100, Kevin Tambascio wrote:> Hi, > > I have a model that looks like this: > > class Assessment < ActiveRecord::Base > ... > set_table_name "SCG_Assessment" > set_primary_key "ID_" > validates_presence_of :Name, :Description, :Version > validates_length_of :Name, :maximum => 50 > ... > end >Are you sure you don''t want :maximum => 49? Your test string was exactly 50 characters long, so according to :maximum => 50 it''s a valid length.> My setup is windows server 2003 R2, RoR 1.1.6, and SQL Server 2005.God save you :-) -- Matthew Beale :: 607 227 0871 Resume & Portfolio @ http://madhatted.com --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Kevin Tambascio wrote:> class Assessment < ActiveRecord::Base > ... > set_table_name "SCG_Assessment" > set_primary_key "ID_" > validates_presence_of :Name, :Description, :Version > validates_length_of :Name, :maximum => 50 > ... > end > > I want the user to see the flash[:notice] message in a <div> element > that I have created in the page template. Instead, they are directed to > this type of page. Because this is a legacy schema, the primary key and > table names must all be overriden. I don''t know this is happening > because of SQL Server, or because of not being able to use the RoR > naming conventions.Kevin, Hmmm. Can you post your rescue block? I can''t think of why something along the lines of begin obj.save! rescue return render(:orig.page) end wouldn''t work for you? Wes -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Matthew Beale wrote:> Are you sure you don''t want :maximum => 49? Your test string was > exactly 50 characters long, so according to :maximum => 50 it''s a valid > length.I didn''t realize my input string was 50 characters exactly. I''m guessing that the varchar(50) in MSSQL also counts a NULL character, which is why the insert fails with exactly 50 characters. When I enter a string that is longer than 50, I get an exception as I would expect. I''m also adding in the error_messages_for construct to my views, so that errors are displayed more completely. I''ll have to go around and subtract one from all my lengths, but other than that things are working as expected.>> My setup is windows server 2003 R2, RoR 1.1.6, and SQL Server 2005. > > God save you :-)Yes, I would much rather have a Linux/MySQL setup, but this is what the customer wants. oh well. Thanks again for your help. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---