Re: [Rails] How can I get this create_table statement on one line?
Yes, you are absolutely correct. Block (if you squint) is kind of like a Proc, and the arguments in between the pipes are the parameters passed into the block. Walter > On Mar 19, 2018, at 12:18 AM, Robert Phillips > wrote: > > Isn't 't' a formal parameter for/of the block, rather than a name of the > block? I have read that blocks are anonymous/nameless. -- 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+unsubscr...@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/ABC9EE88-3B4D-4DA3-95C0-BE65B73FCB87%40wdstudio.com. For more options, visit https://groups.google.com/d/optout.
Re: [Rails] How can I get this create_table statement on one line?
On Sunday, 11 March 2018 14:36:30 UTC, Walter Lee Davis wrote: > > > . > > Here's a multi-line block format migration method: > > create_table :friendly_id_slugs do |t| > t.string :slug, :null => false > t.integer :sluggable_id, :null => false > t.string :sluggable_type, :limit => 50 > t.string :scope > t.datetime :created_at > end > > So you have the method create_table(), which is sent one to two arguments: > the table name to be created, and a hash of options, and then optionally > passed a block with the details of the table. "t" is the name you gave the > block, just the same as "something" in my example. The name itself is not > significant, but off of that block hangs the rest of the details for > create_table to use when making your table. If you don't pass the block, > then the table is created without any columns. > > Thanks. Isn't 't' a formal parameter for/of the block, rather than a name of the block? I have read that blocks are anonymous/nameless. The main thing that had me puzzled but I think I can see better now, were lines like t.integer :abcBut I see now that integer is a method that makes a column of type integer and takes a symbol as parameter. And the reason why it's named in such a way that it doesn't look like a verb, / doesn't look like a method, is because Active Record uses a DSL (Domain Specific Language), which is still Ruby but designed to not look like normal Ruby even though it is -- 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+unsubscr...@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/be679b58-140b-4091-b70e-244a5215b07e%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [Rails] How can I get this create_table statement on one line?
> On Mar 10, 2018, at 9:34 PM, Robert Phillips > wrote: > > Thanks, that works > > When I do create_table (:gars) { |t| t.string :name } > > What exactly is that syntax.. Like is the string of t.string, a method of the > t object, that takes a symbol? > > > Here's the nutshell: Ruby's block syntax may be written two ways. Your example is the one-liner form. You may be used to seeing this: @whatever.each do |something| something.do_something end That could also be written as @whatever.each{ |something| something.do_something } It's just a physically-compact form, it does the same thing in one line as three. To answer your other question, whatever is between the pipes is the object that gets passed into the block. In the case of create_table, it's a method that accepts a block, rather than an iterator (as in my first example) that yields instances to one. If there is an argument before the block, it is optionally inside parentheses (for the multi-line do-end form), and required to be inside parentheses if you're using the one-liner format. Here's a multi-line block format migration method: create_table :friendly_id_slugs do |t| t.string :slug, :null => false t.integer :sluggable_id, :null => false t.string :sluggable_type, :limit => 50 t.string :scope t.datetime :created_at end So you have the method create_table(), which is sent one to two arguments: the table name to be created, and a hash of options, and then optionally passed a block with the details of the table. "t" is the name you gave the block, just the same as "something" in my example. The name itself is not significant, but off of that block hangs the rest of the details for create_table to use when making your table. If you don't pass the block, then the table is created without any columns. https://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/create_table Walter > > > On Friday, 9 March 2018 16:33:51 UTC, Hassan Schroeder wrote: > On Fri, Mar 9, 2018 at 12:42 AM, Robert Phillips > wrote: > > > I can't get a create_table statement onto one line > > > > irb(main):019:0> ActiveRecord::Migration.create_table :wers { |t| t.string > > :name } > > SyntaxError: (irb):19: syntax error, unexpected '{', expecting end-of-input > > Migration.create_table :wers { |t| t.string :name } > > ActiveRecord::Migration.create_table(:wers){ |t| t.string :name } > -- create_table(:wers) >(60.1ms) SET NAMES utf8, @@SESSION.sql_mode = > CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), > ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, > @@SESSION.wait_timeout = 2147483 >(192.1ms) CREATE TABLE `wers` (`id` bigint NOT NULL AUTO_INCREMENT > PRIMARY KEY, `name` varchar(255)) ENGINE=InnoDB >-> 0.4446s > => nil > 2.5.0 (main):0 > > > You need to separate the argument ":wers" from the block with parens. > > HTH! > -- > Hassan Schroeder hassan.s...@gmail.com > twitter: @hassan > Consulting Availability : Silicon Valley or remote > > -- > 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+unsubscr...@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/79c19806-23ec-4af6-b2e2-e1d590ecea18%40googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- 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+unsubscr...@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/7A44AE7C-A9BF-4CF5-9E1D-E8D6EB114B76%40wdstudio.com. For more options, visit https://groups.google.com/d/optout.
Re: [Rails] How can I get this create_table statement on one line?
Thanks, that works When I do create_table (:gars) { |t| t.string :name } What exactly is that syntax.. Like is the string of t.string, a method of the t object, that takes a symbol? On Friday, 9 March 2018 16:33:51 UTC, Hassan Schroeder wrote: > > On Fri, Mar 9, 2018 at 12:42 AM, Robert Phillips > > wrote: > > > I can't get a create_table statement onto one line > > > > irb(main):019:0> ActiveRecord::Migration.create_table :wers { |t| > t.string > > :name } > > SyntaxError: (irb):19: syntax error, unexpected '{', expecting > end-of-input > > Migration.create_table :wers { |t| t.string :name } > > ActiveRecord::Migration.create_table(:wers){ |t| t.string :name } > -- create_table(:wers) >(60.1ms) SET NAMES utf8, @@SESSION.sql_mode = > CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), > ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, > @@SESSION.wait_timeout = 2147483 >(192.1ms) CREATE TABLE `wers` (`id` bigint NOT NULL AUTO_INCREMENT > PRIMARY KEY, `name` varchar(255)) ENGINE=InnoDB >-> 0.4446s > => nil > 2.5.0 (main):0 > > > You need to separate the argument ":wers" from the block with parens. > > HTH! > -- > Hassan Schroeder hassan.s...@gmail.com > > twitter: @hassan > Consulting Availability : Silicon Valley or remote > -- 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+unsubscr...@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/79c19806-23ec-4af6-b2e2-e1d590ecea18%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [Rails] How can I get this create_table statement on one line?
On Fri, Mar 9, 2018 at 12:42 AM, Robert Phillips wrote: > I can't get a create_table statement onto one line > > irb(main):019:0> ActiveRecord::Migration.create_table :wers { |t| t.string > :name } > SyntaxError: (irb):19: syntax error, unexpected '{', expecting end-of-input > Migration.create_table :wers { |t| t.string :name } ActiveRecord::Migration.create_table(:wers){ |t| t.string :name } -- create_table(:wers) (60.1ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483 (192.1ms) CREATE TABLE `wers` (`id` bigint NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` varchar(255)) ENGINE=InnoDB -> 0.4446s => nil 2.5.0 (main):0 > You need to separate the argument ":wers" from the block with parens. HTH! -- Hassan Schroeder hassan.schroe...@gmail.com twitter: @hassan Consulting Availability : Silicon Valley or remote -- 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+unsubscr...@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/CACmC4yBZ_EHZ_WPNjD5kuK6OCA62SKH0XJudsjphBmOCfgFjdg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.