KirbyBase : update method problem


#1

the basic code below makes kirby complain that im trying to update a
link_to many field in my table when as can be seen I am not. Here is
some code for you to copy into irb to reproduce the error (though the
problem lies with only the pt table i have also included the code to
create the table its linked to called tt). I have read the manual many
times to no avail. I also looked through kirbys code but im a beginner
and i got lost in it :wink:

require ‘kirbybase’

db = KirbyBase.new

db.drop_table(:pt) if db.table_exists?(:pt)
db.drop_table(:tt) if db.table_exists?(:tt)

tt = db.create_table(:tt, :task_title, {:DataType=>:String,
:Default=>‘No Title’}, :completed, {:DataType=>:Boolean,
:Default=>true}, :project, {:DataType=>:String,
:Default=>‘None’},:p_project_id, :Integer)

pt = db.create_table(:pt, :project_title, {:DataType=>:String,
:Default=>‘No Project Name’}, :p_project_id, {:DataType=>:Integer,
:Default=>0}, :p_tasks,{:DataType=>:ResultSet,
:Link_many=>[:p_project_id, :task_table, :p_project_id]})

pt.insert(:project_title => “old”) #creates record with recno = 1
pt.update(:project_title => “new”) {|r| r.recno == 1}


here is my error - p_tasks is the linked item in the other table tt.

ArgumentError: You cannot input a value for this field: p_tasks
from
c:/ruby/lib/ruby/gems/1.8/gems/KirbyBase-2.6/lib/kirbybase.rb:3079:
in check_against_input_for_specials' from c:/ruby/lib/ruby/gems/1.8/gems/KirbyBase-2.6/lib/kirbybase.rb:3078: ineach’
from
c:/ruby/lib/ruby/gems/1.8/gems/KirbyBase-2.6/lib/kirbybase.rb:3078:
in check_against_input_for_specials' from c:/ruby/lib/ruby/gems/1.8/gems/KirbyBase-2.6/lib/kirbybase.rb:2283: inset’
from
c:/ruby/lib/ruby/gems/1.8/gems/KirbyBase-2.6/lib/kirbybase.rb:2256:
in each' from c:/ruby/lib/ruby/gems/1.8/gems/KirbyBase-2.6/lib/kirbybase.rb:2256: inset’
from
c:/ruby/lib/ruby/gems/1.8/gems/KirbyBase-2.6/lib/kirbybase.rb:2220:
in `update’
from (irb):72
from :0


in case your wondering, tt is a tasks table and pt is a projects table.
This is for a simple todo list app. Projects are comprised of tasks
hence the link.

Can anyone help?


#2

This should work:
pt.update(:project_title => “new”,:p_tasks=>nil) {|r| r.recno == 1}

not sure if that’s what you were shooting for, and I’m not sure why that
doesn’t work the way you were doing it.
I’ll try to look at it some more today.

/Shawn


#3

hey shawn, thanks for that, it does work with the short snippet above,
ive yet to try it with my project though. Im wondering if this is whats
intended by the author and its simply not been updated in the docs or if
its a coding error.