jleake-xLhkCMTzzpz10XsdtD+oqA@public.gmane.org
2013-Mar-24 12:20 UTC
Rails 4.0 has_many_through and fields_for
Hi all, I am trying to reproduce rails 3.2 behaviour with fields_for and
nested attributes.
class ControllerAction < ActiveRecord::Base
has_many :interactions, dependent: :destroy
has_many :roles, through: :interactions
scope :controllers, lambda {|name| where("controller_name_id =
?",
name)}
scope :actions, lambda {|name| where("action_name_id = ?",
name)}
def initialized_interactions() # this is the key method
[].tap do |o|
Role.all.each do |r|
if p = interactions.find { |p| p.role_id == r.id }
o << p.tap { |p| p.enable ||= true }
else
o << Interaction.new(:role_id => r.id)
end
end
end
end
end
class Role < ActiveRecord::Base
has_many :interactions
end
class Interaction < ActiveRecord::Base
belongs_to :controller_action
belongs_to :role
attr_accessor :enable # nice little thingy here
# It is now recommended to use strong params instead of
''attr_accessible :enable, :controller_action_id, :role_id''
end
controller_actions_controller.rb
...
private
# Use callbacks to share common setup or constraints between
actions.
def set_controller_action
@controller_action = ControllerAction.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the
white list through.
def controller_action_params
params.require(:controller_action).permit!
end
controller_actions view - excluding error code and most css formatting.
_form.rb
<%= form_for(@controller_action) do |f| %>
...
<%= f.label :name %><br />
<%= f.text_field :name %>
<h2><%= f.label :role %></h2>
<%= f.fields_for :interactions,
@controller_action.initialized_interactions() do |builder| %>
<% role = builder.object.role %>
<%= builder.hidden_field :role_id %>
<%= builder.check_box :enable %>
<%= builder.label :enable, role.name %>
<% end %>
<%= f.submit %>
<% end %>
Under rails 3.2.11 I get a form that allows the user to edit roles.
Editing controller_action
Name
Roles
Webmaster
Admin
Moderator
Editor
Registered User
Guest
Show <http://localhost:3200/controller_actions/1> |
Back<http://localhost:3200/controller_actions>
Under Rails 4.0 you get:-
undefined method `role'' for #<Array:0xb875d4c>
Extracted source (around line *#21*):
18192021222324
<div>
<h2><%= f.label :role %></h2>
<%= f.fields_for :interactions,
@controller_action.initialized_interactions() do |builder| %>
<% role = builder.object.role %>
<%= builder.hidden_field :role_id %>
<div class="field">
Trace of template inclusion: app/views/controller_actions/edit.html.erb
Rails.root: /home/john/RubyMineProjects/Rails/4.0/urps2
Application Trace <http://localhost:3100/controller_actions/1/edit#> |
Framework
Trace <http://localhost:3100/controller_actions/1/edit#> | Full
Trace<http://localhost:3100/controller_actions/1/edit#>
app/views/controller_actions/_form.html.erb:21:in `block (2 levels) in
_app_views_controller_actions__form_html_erb__366592963_95670400''
actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `block
in capture''
actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in
`with_output_buffer''
actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in
`capture''
actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:707:in
`fields_for''
actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:1501:in
`fields_for''
app/views/controller_actions/_form.html.erb:20:in `block in
_app_views_controller_actions__form_html_erb__366592963_95670400''
actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `block
in capture''
actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in
`with_output_buffer''
actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in
`capture''
actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:435:in
`form_for''
app/views/controller_actions/_form.html.erb:1:in
`_app_views_controller_actions__form_html_erb__366592963_95670400''
actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in
render''
activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in
`instrument''
actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in `render''
actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:306:in
`render_partial''
actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:279:in
`block in render''
actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in
`block in instrument''
activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in
instrument''
activesupport (4.0.0.beta1)
lib/active_support/notifications/instrumenter.rb:20:in `instrument''
activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in
`instrument''
actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in
`instrument''
actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:278:in
`render''
actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:41:in
`render_partial''
actionpack (4.0.0.beta1) lib/action_view/helpers/rendering_helper.rb:27:in
`render''
app/views/controller_actions/edit.html.erb:3:in
`_app_views_controller_actions_edit_html_erb__785330494_92185850''
actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in
render''
activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in
`instrument''
actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in `render''
actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:49:in
`block (2 levels) in render_template''
actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in
`block in instrument''
activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in
instrument''
activesupport (4.0.0.beta1)
lib/active_support/notifications/instrumenter.rb:20:in `instrument''
activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in
`instrument''
actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in
`instrument''
actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:48:in
`block in render_template''
actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:56:in
`render_with_layout''
actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:47:in
`render_template''
actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:17:in
`render''
actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:36:in
`render_template''
actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:17:in
`render''
actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:119:in
`_render_template''
actionpack (4.0.0.beta1) lib/action_controller/metal/streaming.rb:219:in
`_render_template''
actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:112:in
`render_to_body''
actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:33:in
`render_to_body''
actionpack (4.0.0.beta1) lib/action_controller/metal/renderers.rb:26:in
`render_to_body''
actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:97:in
`render''
actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:16:in
`render''
actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:41:in
`block (2 levels) in render''
activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in `block
in ms''
/home/john/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/benchmark.rb:296:in
`realtime''
activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in
`ms''
actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:41:in
`block in render''
actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:84:in
`cleanup_view_runtime''
activerecord (4.0.0.beta1)
lib/active_record/railties/controller_runtime.rb:24:in
`cleanup_view_runtime''
actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:40:in
`render''
actionpack (4.0.0.beta1) lib/action_controller/metal/implicit_render.rb:10:in
`default_render''
actionpack (4.0.0.beta1) lib/action_controller/metal/implicit_render.rb:5:in
`send_action''
actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:189:in
`process_action''
actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:10:in
`process_action''
actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:18:in `block in
process_action''
activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:413:in
`_run__68927184__process_action__callbacks''
activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in
`run_callbacks''
actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:17:in
`process_action''
actionpack (4.0.0.beta1) lib/action_controller/metal/rescue.rb:29:in
`process_action''
actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:31:in
`block in process_action''
activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in
instrument''
activesupport (4.0.0.beta1)
lib/active_support/notifications/instrumenter.rb:20:in `instrument''
activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in
`instrument''
actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:30:in
`process_action''
actionpack (4.0.0.beta1) lib/action_controller/metal/params_wrapper.rb:245:in
`process_action''
activerecord (4.0.0.beta1)
lib/active_record/railties/controller_runtime.rb:18:in `process_action''
actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:136:in
`process''
actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:44:in
`process''
actionpack (4.0.0.beta1) lib/action_controller/metal.rb:196:in
`dispatch''
actionpack (4.0.0.beta1) lib/action_controller/metal/rack_delegation.rb:13:in
`dispatch''
actionpack (4.0.0.beta1) lib/action_controller/metal.rb:232:in `block in
action''
actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in
`call''
actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in
`dispatch''
actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:46:in
`call''
actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:69:in `block in
call''
actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in
`each''
actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in
`call''
actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:651:in
`call''
rack (1.5.2) lib/rack/etag.rb:23:in `call''
rack (1.5.2) lib/rack/conditionalget.rb:25:in `call''
rack (1.5.2) lib/rack/head.rb:11:in `call''
actionpack (4.0.0.beta1) lib/action_dispatch/middleware/params_parser.rb:27:in
`call''
actionpack (4.0.0.beta1) lib/action_dispatch/middleware/flash.rb:241:in
`call''
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context''
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call''
actionpack (4.0.0.beta1) lib/action_dispatch/middleware/cookies.rb:452:in
`call''
activerecord (4.0.0.beta1) lib/active_record/query_cache.rb:36:in
`call''
activerecord (4.0.0.beta1)
lib/active_record/connection_adapters/abstract/connection_pool.rb:632:in
`call''
activerecord (4.0.0.beta1) lib/active_record/migration.rb:348:in `call''
actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:29:in
`block in call''
activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:373:in
`_run__125207171__call__callbacks''
activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in
`run_callbacks''
actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:27:in
`call''
actionpack (4.0.0.beta1) lib/action_dispatch/middleware/reloader.rb:64:in
`call''
actionpack (4.0.0.beta1) lib/action_dispatch/middleware/remote_ip.rb:76:in
`call''
actionpack (4.0.0.beta1)
lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call''
actionpack (4.0.0.beta1) lib/action_dispatch/middleware/show_exceptions.rb:30:in
`call''
railties (4.0.0.beta1) lib/rails/rack/logger.rb:38:in `call_app''
railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `block in call''
activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in `block in
tagged''
activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:25:in
`tagged''
activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in
`tagged''
railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `call''
actionpack (4.0.0.beta1) lib/action_dispatch/middleware/request_id.rb:21:in
`call''
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call''
rack (1.5.2) lib/rack/runtime.rb:17:in `call''
activesupport (4.0.0.beta1)
lib/active_support/cache/strategy/local_cache.rb:72:in `call''
rack (1.5.2) lib/rack/lock.rb:17:in `call''
actionpack (4.0.0.beta1) lib/action_dispatch/middleware/static.rb:64:in
`call''
railties (4.0.0.beta1) lib/rails/engine.rb:510:in `call''
railties (4.0.0.beta1) lib/rails/application.rb:96:in `call''
railties (4.0.0.beta1) lib/rails/railtie/configurable.rb:30:in
`method_missing''
unicorn (4.6.2) lib/unicorn/http_server.rb:552:in `process_client''
unicorn (4.6.2) lib/unicorn/http_server.rb:632:in `worker_loop''
unicorn (4.6.2) lib/unicorn/http_server.rb:500:in
`spawn_missing_workers''
unicorn (4.6.2) lib/unicorn/http_server.rb:511:in
`maintain_worker_count''
unicorn (4.6.2) lib/unicorn/http_server.rb:277:in `join''
unicorn (4.6.2) bin/unicorn_rails:209:in `<top (required)>''
/home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in
`load''
/home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in `<top
(required)>''
ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in `debug_load''
ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in
`debug_program''
ruby-debug-ide (0.4.17.beta16) bin/rdebug-ide:109:in `<top
(required)>''
-e:1:in `load''
-e:1:in `<main>''
Request
*Parameters*:
{"id"=>"1"}
Toggle session dump <http://localhost:3100/controller_actions/1/edit#>
Toggle env dump <http://localhost:3100/controller_actions/1/edit#>
Response
*Headers*:
None
Sorry about the verbosity but I am really struggling to solve this most
basic use case.
I have tried to figure out why the form builder returns an array but and
would write my own if I could figure out how to.
Any help appreciated.
--
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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-/vqAtvu_Gb7sJ.
For more options, visit https://groups.google.com/groups/opt_out.
Simple. You return an array from initialized_interactions.That''s why. -- Dheeraj Kumar On Sunday 24 March 2013 at 5:50 PM, jleake-xLhkCMTzzpz10XsdtD+oqA@public.gmane.org wrote:> Hi all, I am trying to reproduce rails 3.2 behaviour with fields_for and nested attributes. > > class ControllerAction < ActiveRecord::Base > has_many :interactions, dependent: :destroy > has_many :roles, through: :interactions > > scope :controllers, lambda {|name| where("controller_name_id = ?", name)} > scope :actions, lambda {|name| where("action_name_id = ?", name)} > > def initialized_interactions() # this is the key method > [].tap do |o| > Role.all.each do |r| > if p = interactions.find { |p| p.role_id == r.id } > o << p.tap { |p| p.enable ||= true } > else > o << Interaction.new(:role_id => r.id) > end > end > end > end > end > > class Role < ActiveRecord::Base > has_many :interactions > end > > class Interaction < ActiveRecord::Base > belongs_to :controller_action > belongs_to :role > attr_accessor :enable # nice little thingy here > # It is now recommended to use strong params instead of ''attr_accessible :enable, :controller_action_id, :role_id'' > end > > controller_actions_controller.rb > ... > private > # Use callbacks to share common setup or constraints between actions. > def set_controller_action > @controller_action = ControllerAction.find(params[:id]) > end > > # Never trust parameters from the scary internet, only allow the white list through. > def controller_action_params > params.require(:controller_action).permit! > end > > controller_actions view - excluding error code and most css formatting. > _form.rb > > <%= form_for(@controller_action) do |f| %> > ... > <%= f.label :name %><br /> > <%= f.text_field :name %> > > <h2><%= f.label :role %></h2> > <%= f.fields_for :interactions, @controller_action.initialized_interactions() do |builder| %> > <% role = builder.object.role %> > <%= builder.hidden_field :role_id %> > > <%= builder.check_box :enable %> > <%= builder.label :enable, role.name (http://role.name) %> > > <% end %> > > <%= f.submit %> > > <% end %> > > Under rails 3.2.11 I get a form that allows the user to edit roles. > Editing controller_action > Name > Roles > Webmaster > Admin > Moderator > Editor > Registered User > Guest > > > > Show (http://localhost:3200/controller_actions/1) | Back (http://localhost:3200/controller_actions) > > Under Rails 4.0 you get:- > undefined method `role'' for #<Array:0xb875d4c> > Extracted source (around line #21): > > 18 19 20 21 22 23 24 > > <div> > <h2><%= f.label :role %></h2> > <%= f.fields_for :interactions, @controller_action.initialized_interactions() do |builder| %> > <% role = builder.object.role %> > <%= builder.hidden_field :role_id %> > > <div class="field"> > > > > > > > > Trace of template inclusion: app/views/controller_actions/edit.html.erb > Rails.root: /home/john/RubyMineProjects/Rails/4.0/urps2 > Application Trace (http://localhost:3100/controller_actions/1/edit#) | Framework Trace (http://localhost:3100/controller_actions/1/edit#) | Full Trace (http://localhost:3100/controller_actions/1/edit#) > app/views/controller_actions/_form.html.erb:21:in `block (2 levels) in _app_views_controller_actions__form_html_erb__366592963_95670400'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `block in capture'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in `with_output_buffer'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `capture'' actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:707:in `fields_for'' actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:1501:in `fields_for'' app/views/controller_actions/_form.html.erb:20:in `block in _app_views_controller_actions__form_html_erb__366592963_95670400'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `block in capture'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in `with_output_buffer'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `capture'' actionpack (4.0.0.beta1)lib/action_view/helpers/form_helper.rb:435:in `form_for'' app/views/controller_actions/_form.html.erb:1:in `_app_views_controller_actions__form_html_erb__366592963_95670400'' actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in render'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in `instrument'' actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in `render'' actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:306:in `render_partial'' actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:279:in `block in render'' actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `block in instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' actionpack (4.0.0.beta1) lib/act ion_view/renderer/abstract_renderer.rb:23:in `instrument'' actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:278:in `render'' actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:41:in `render_partial'' actionpack (4.0.0.beta1) lib/action_view/helpers/rendering_helper.rb:27:in `render'' app/views/controller_actions/edit.html.erb:3:in `_app_views_controller_actions_edit_html_erb__785330494_92185850'' actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in render'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in `instrument'' actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in `render'' actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:49:in `block (2 levels) in render_template'' actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `block in instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' activesupport (4.0.0.beta1) lib/a ctive_support/notifications/instrumenter.rb:20:in `instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `instrument'' actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:48:in `block in render_template'' actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:56:in `render_with_layout'' actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:47:in `render_template'' actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:17:in `render'' actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:36:in `render_template'' actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:17:in `render'' actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:119:in `_render_template'' actionpack (4.0.0.beta1) lib/action_controller/metal/streaming.rb:219:in `_render_template'' actionpack (4.0.0.beta1) lib/abstra ct_controller/rendering.rb:112:in `render_to_body'' actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:33:in `render_to_body'' actionpack (4.0.0.beta1) lib/action_controller/metal/renderers.rb:26:in `render_to_body'' actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:97:in `render'' actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:16:in `render'' actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:41:in `block (2 levels) in render'' activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in `block in ms'' /home/john/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/benchmark.rb:296:in `realtime'' activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in `ms'' actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:41:in `block in render'' actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:84:in `cleanup_view_runtime'' activerecord (4.0.0.beta1) lib/active_record/railties/con troller_runtime.rb:24:in `cleanup_view_runtime'' actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:40:in `render'' actionpack (4.0.0.beta1) lib/action_controller/metal/implicit_render.rb:10:in `default_render'' actionpack (4.0.0.beta1) lib/action_controller/metal/implicit_render.rb:5:in `send_action'' actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:189:in `process_action'' actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:10:in `process_action'' actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:18:in `block in process_action'' activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:413:in `_run__68927184__process_action__callbacks'' activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in `run_callbacks'' actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:17:in `process_action'' actionpack (4.0.0.beta1) lib/action_controller/metal/rescue.rb:29:in `process_action'' actionpack (4.0.0.beta1) lib/action_controller/me tal/instrumentation.rb:31:in `block in process_action'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:30:in `process_action'' actionpack (4.0.0.beta1) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'' activerecord (4.0.0.beta1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'' actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:136:in `process'' actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:44:in `process'' actionpack (4.0.0.beta1) lib/action_controller/metal.rb:196:in `dispatch'' actionpack (4.0.0.beta1) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'' actionpack (4.0.0.beta1) lib/action_controller/metal.rb:232:in `bl ock in action'' actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in `dispatch'' actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:46:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:69:in `block in call'' actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in `each'' actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:651:in `call'' rack (1.5.2) lib/rack/etag.rb:23:in `call'' rack (1.5.2) lib/rack/conditionalget.rb:25:in `call'' rack (1.5.2) lib/rack/head.rb:11:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/params_parser.rb:27:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/flash.rb:241:in `call'' rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'' rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/cookies.rb:452:in `call'' activerecord (4.0.0.beta1) lib/active_record/query_cache.rb:36:in `call'' activerecord (4.0.0.beta1) lib/active_record/connection_adapters/abstract/connection_pool.rb:632:in `call'' activerecord (4.0.0.beta1) lib/active_record/migration.rb:348:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'' activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:373:in `_run__125207171__call__callbacks'' activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in `run_callbacks'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/reloader.rb:64:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/ show_exceptions.rb:30:in `call'' railties (4.0.0.beta1) lib/rails/rack/logger.rb:38:in `call_app'' railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `block in call'' activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in `block in tagged'' activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:25:in `tagged'' activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in `tagged'' railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/request_id.rb:21:in `call'' rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'' rack (1.5.2) lib/rack/runtime.rb:17:in `call'' activesupport (4.0.0.beta1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'' rack (1.5.2) lib/rack/lock.rb:17:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/static.rb:64:in `call'' railties (4.0.0.beta1) lib/rails/engine.rb:510:in `call'' railties (4.0.0.beta1) lib/rails/application.rb:96:in `call'' railties (4.0.0.beta1) lib/rails/railtie/configurable.rb:30:in `method_missing'' unicorn (4.6.2) lib/unicorn/http_server.rb:552:in `process_client'' unicorn (4.6.2) lib/unicorn/http_server.rb:632:in `worker_loop'' unicorn (4.6.2) lib/unicorn/http_server.rb:500:in `spawn_missing_workers'' unicorn (4.6.2) lib/unicorn/http_server.rb:511:in `maintain_worker_count'' unicorn (4.6.2) lib/unicorn/http_server.rb:277:in `join'' unicorn (4.6.2) bin/unicorn_rails:209:in `<top (required)>'' /home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in `load'' /home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in `<top (required)>'' ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in `debug_load'' ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in `debug_program'' ruby-debug-ide (0.4.17.beta16) bin/rdebug-ide:109:in `<top (required)>'' -e:1:in `load'' -e:1:in `<main>''> > > Request > Parameters: > {"id"=>"1"} > Toggle session dump (http://localhost:3100/controller_actions/1/edit#) > > Toggle env dump (http://localhost:3100/controller_actions/1/edit#) > > Response > Headers: > None > > Sorry about the verbosity but I am really struggling to solve this most basic use case. > > I have tried to figure out why the form builder returns an array but and would write my own if I could figure out how to. > > Any help appreciated. > -- > 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org (mailto:rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org). > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org (mailto:rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org). > To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/vqAtvu_Gb7sJ. > For more options, visit https://groups.google.com/groups/opt_out. > >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
jleake-xLhkCMTzzpz10XsdtD+oqA@public.gmane.org
2013-Mar-24 13:37 UTC
Re: Rails 4.0 has_many_through and fields_for
So what should be returned instead ? On Sunday, 24 March 2013 12:20:49 UTC, jle...-xLhkCMTzzpz10XsdtD+oqA@public.gmane.org wrote:> > Hi all, I am trying to reproduce rails 3.2 behaviour with fields_for and > nested attributes. > > class ControllerAction < ActiveRecord::Base > has_many :interactions, dependent: :destroy > has_many :roles, through: :interactions > > scope :controllers, lambda {|name| where("controller_name_id = ?", > name)} > scope :actions, lambda {|name| where("action_name_id = ?", name)} > > def initialized_interactions() # this is the key method > [].tap do |o| > Role.all.each do |r| > if p = interactions.find { |p| p.role_id == r.id } > o << p.tap { |p| p.enable ||= true } > else > o << Interaction.new(:role_id => r.id) > end > end > end > end > end > > class Role < ActiveRecord::Base > has_many :interactions > end > > class Interaction < ActiveRecord::Base > belongs_to :controller_action > belongs_to :role > attr_accessor :enable # nice little thingy here > # It is now recommended to use strong params instead of > ''attr_accessible :enable, :controller_action_id, :role_id'' > end > > controller_actions_controller.rb > ... > private > # Use callbacks to share common setup or constraints between > actions. > def set_controller_action > @controller_action = ControllerAction.find(params[:id]) > end > > # Never trust parameters from the scary internet, only allow the > white list through. > def controller_action_params > params.require(:controller_action).permit! > end > > controller_actions view - excluding error code and most css formatting. > _form.rb > > <%= form_for(@controller_action) do |f| %> > ... > <%= f.label :name %><br /> > <%= f.text_field :name %> > > <h2><%= f.label :role %></h2> > <%= f.fields_for :interactions, > @controller_action.initialized_interactions() do |builder| %> > <% role = builder.object.role %> > <%= builder.hidden_field :role_id %> > > <%= builder.check_box :enable %> > <%= builder.label :enable, role.name %> > > <% end %> > > <%= f.submit %> > > <% end %> > > Under rails 3.2.11 I get a form that allows the user to edit roles. > Editing controller_action > Name > Roles > Webmaster > Admin > Moderator > Editor > Registered User > Guest > Show <http://localhost:3200/controller_actions/1> | Back<http://localhost:3200/controller_actions> > > Under Rails 4.0 you get:- > > undefined method `role'' for #<Array:0xb875d4c> > > Extracted source (around line *#21*): > > 18192021222324 > > <div> > <h2><%= f.label :role %></h2> > <%= f.fields_for :interactions, @controller_action.initialized_interactions() do |builder| %> > <% role = builder.object.role %> > <%= builder.hidden_field :role_id %> > <div class="field"> > > Trace of template inclusion: app/views/controller_actions/edit.html.erb > > Rails.root: /home/john/RubyMineProjects/Rails/4.0/urps2 > Application Trace <http://localhost:3100/controller_actions/1/edit#> | Framework > Trace <http://localhost:3100/controller_actions/1/edit#> | Full Trace<http://localhost:3100/controller_actions/1/edit#> > > app/views/controller_actions/_form.html.erb:21:in `block (2 levels) in _app_views_controller_actions__form_html_erb__366592963_95670400'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `block in capture'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in `with_output_buffer'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `capture'' > actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:707:in `fields_for'' > actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:1501:in `fields_for'' > app/views/controller_actions/_form.html.erb:20:in `block in _app_views_controller_actions__form_html_erb__366592963_95670400'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `block in capture'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in `with_output_buffer'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `capture'' > actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:435:in `form_for'' > app/views/controller_actions/_form.html.erb:1:in `_app_views_controller_actions__form_html_erb__366592963_95670400'' > actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in render'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in `render'' > actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:306:in `render_partial'' > actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:279:in `block in render'' > actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `block in instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:278:in `render'' > actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:41:in `render_partial'' > actionpack (4.0.0.beta1) lib/action_view/helpers/rendering_helper.rb:27:in `render'' > app/views/controller_actions/edit.html.erb:3:in `_app_views_controller_actions_edit_html_erb__785330494_92185850'' > actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in render'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in `render'' > actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:49:in `block (2 levels) in render_template'' > actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `block in instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:48:in `block in render_template'' > actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:56:in `render_with_layout'' > actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:47:in `render_template'' > actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:17:in `render'' > actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:36:in `render_template'' > actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:17:in `render'' > actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:119:in `_render_template'' > actionpack (4.0.0.beta1) lib/action_controller/metal/streaming.rb:219:in `_render_template'' > actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:112:in `render_to_body'' > actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:33:in `render_to_body'' > actionpack (4.0.0.beta1) lib/action_controller/metal/renderers.rb:26:in `render_to_body'' > actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:97:in `render'' > actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:16:in `render'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:41:in `block (2 levels) in render'' > activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in `block in ms'' > /home/john/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/benchmark.rb:296:in `realtime'' > activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in `ms'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:41:in `block in render'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:84:in `cleanup_view_runtime'' > activerecord (4.0.0.beta1) lib/active_record/railties/controller_runtime.rb:24:in `cleanup_view_runtime'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:40:in `render'' > actionpack (4.0.0.beta1) lib/action_controller/metal/implicit_render.rb:10:in `default_render'' > actionpack (4.0.0.beta1) lib/action_controller/metal/implicit_render.rb:5:in `send_action'' > actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:189:in `process_action'' > actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:10:in `process_action'' > actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:18:in `block in process_action'' > activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:413:in `_run__68927184__process_action__callbacks'' > activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in `run_callbacks'' > actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:17:in `process_action'' > actionpack (4.0.0.beta1) lib/action_controller/metal/rescue.rb:29:in `process_action'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:30:in `process_action'' > actionpack (4.0.0.beta1) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'' > activerecord (4.0.0.beta1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'' > actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:136:in `process'' > actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:44:in `process'' > actionpack (4.0.0.beta1) lib/action_controller/metal.rb:196:in `dispatch'' > actionpack (4.0.0.beta1) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'' > actionpack (4.0.0.beta1) lib/action_controller/metal.rb:232:in `block in action'' > actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in `dispatch'' > actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:46:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:69:in `block in call'' > actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in `each'' > actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:651:in `call'' > rack (1.5.2) lib/rack/etag.rb:23:in `call'' > rack (1.5.2) lib/rack/conditionalget.rb:25:in `call'' > rack (1.5.2) lib/rack/head.rb:11:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/params_parser.rb:27:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/flash.rb:241:in `call'' > rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'' > rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/cookies.rb:452:in `call'' > activerecord (4.0.0.beta1) lib/active_record/query_cache.rb:36:in `call'' > activerecord (4.0.0.beta1) lib/active_record/connection_adapters/abstract/connection_pool.rb:632:in `call'' > activerecord (4.0.0.beta1) lib/active_record/migration.rb:348:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'' > activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:373:in `_run__125207171__call__callbacks'' > activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in `run_callbacks'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/reloader.rb:64:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'' > railties (4.0.0.beta1) lib/rails/rack/logger.rb:38:in `call_app'' > railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `block in call'' > activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in `block in tagged'' > activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:25:in `tagged'' > activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in `tagged'' > railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/request_id.rb:21:in `call'' > rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'' > rack (1.5.2) lib/rack/runtime.rb:17:in `call'' > activesupport (4.0.0.beta1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'' > rack (1.5.2) lib/rack/lock.rb:17:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/static.rb:64:in `call'' > railties (4.0.0.beta1) lib/rails/engine.rb:510:in `call'' > railties (4.0.0.beta1) lib/rails/application.rb:96:in `call'' > railties (4.0.0.beta1) lib/rails/railtie/configurable.rb:30:in `method_missing'' > unicorn (4.6.2) lib/unicorn/http_server.rb:552:in `process_client'' > unicorn (4.6.2) lib/unicorn/http_server.rb:632:in `worker_loop'' > unicorn (4.6.2) lib/unicorn/http_server.rb:500:in `spawn_missing_workers'' > unicorn (4.6.2) lib/unicorn/http_server.rb:511:in `maintain_worker_count'' > unicorn (4.6.2) lib/unicorn/http_server.rb:277:in `join'' > unicorn (4.6.2) bin/unicorn_rails:209:in `<top (required)>'' > /home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in `load'' > /home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in `<top (required)>'' > ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in `debug_load'' > ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in `debug_program'' > ruby-debug-ide (0.4.17.beta16) bin/rdebug-ide:109:in `<top (required)>'' > -e:1:in `load'' > -e:1:in `<main>'' > > Request > > *Parameters*: > > {"id"=>"1"} > > Toggle session dump <http://localhost:3100/controller_actions/1/edit#> > Toggle env dump <http://localhost:3100/controller_actions/1/edit#> > Response > > *Headers*: > > None > > > Sorry about the verbosity but I am really struggling to solve this most > basic use case. > > I have tried to figure out why the form builder returns an array but and > would write my own if I could figure out how to. > > Any help appreciated. >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/lyjS-Uad5VwJ. For more options, visit https://groups.google.com/groups/opt_out.
Your question is wrong. You should not be rendering a form for :interactions (which will be an AR::Relation) using an array. You should rather be initializing the controller_action.interactions directly, and remove the second parameter in the fields_for call. -- Dheeraj Kumar On Sunday 24 March 2013 at 7:07 PM, jleake-xLhkCMTzzpz10XsdtD+oqA@public.gmane.org wrote:> So what should be returned instead ? > > On Sunday, 24 March 2013 12:20:49 UTC, jle...-xLhkCMTzzpz10XsdtD+oqA@public.gmane.org (http://socit.co.uk) wrote: > > Hi all, I am trying to reproduce rails 3.2 behaviour with fields_for and nested attributes. > > > > class ControllerAction < ActiveRecord::Base > > has_many :interactions, dependent: :destroy > > has_many :roles, through: :interactions > > > > scope :controllers, lambda {|name| where("controller_name_id = ?", name)} > > scope :actions, lambda {|name| where("action_name_id = ?", name)} > > > > def initialized_interactions() # this is the key method > > [].tap do |o| > > Role.all.each do |r| > > if p = interactions.find { |p| p.role_id == r.id (http://r.id) } > > o << p.tap { |p| p.enable ||= true } > > else > > o << Interaction.new(:role_id => r.id (http://r.id)) > > end > > end > > end > > end > > end > > > > class Role < ActiveRecord::Base > > has_many :interactions > > end > > > > class Interaction < ActiveRecord::Base > > belongs_to :controller_action > > belongs_to :role > > attr_accessor :enable # nice little thingy here > > # It is now recommended to use strong params instead of ''attr_accessible :enable, :controller_action_id, :role_id'' > > end > > > > controller_actions_controller.rb > > ... > > private > > # Use callbacks to share common setup or constraints between actions. > > def set_controller_action > > @controller_action = ControllerAction.find(params[:id]) > > end > > > > # Never trust parameters from the scary internet, only allow the white list through. > > def controller_action_params > > params.require(:controller_action).permit! > > end > > > > controller_actions view - excluding error code and most css formatting. > > _form.rb > > > > <%= form_for(@controller_action) do |f| %> > > ... > > <%= f.label :name %><br /> > > <%= f.text_field :name %> > > > > <h2><%= f.label :role %></h2> > > <%= f.fields_for :interactions, @controller_action.initialized_interactions() do |builder| %> > > <% role = builder.object.role %> > > <%= builder.hidden_field :role_id %> > > > > <%= builder.check_box :enable %> > > <%= builder.label :enable, role.name (http://role.name) %> > > > > <% end %> > > > > <%= f.submit %> > > > > <% end %> > > > > Under rails 3.2.11 I get a form that allows the user to edit roles. > > Editing controller_action > > Name > > Roles > > Webmaster > > Admin > > Moderator > > Editor > > Registered User > > Guest > > > > > > > > Show (http://localhost:3200/controller_actions/1) | Back (http://localhost:3200/controller_actions) > > > > Under Rails 4.0 you get:- > > undefined method `role'' for #<Array:0xb875d4c> > > Extracted source (around line #21): > > > > 18 19 20 21 22 23 24 > > > > <div> > > <h2><%= f.label :role %></h2> > > <%= f.fields_for :interactions, @controller_action.initialized_interactions() do |builder| %> > > <% role = builder.object.role %> > > <%= builder.hidden_field :role_id %> > > > > <div class="field"> > > > > > > > > > > > > > > > > Trace of template inclusion: app/views/controller_actions/edit.html.erb > > Rails.root: /home/john/RubyMineProjects/Rails/4.0/urps2 > > Application Trace (http://localhost:3100/controller_actions/1/edit#) | Framework Trace (http://localhost:3100/controller_actions/1/edit#) | Full Trace (http://localhost:3100/controller_actions/1/edit#) > > app/views/controller_actions/_form.html.erb:21:in `block (2 levels) in _app_views_controller_actions__form_html_erb__366592963_95670400'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `block in capture'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in `with_output_buffer'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `capture'' actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:707:in `fields_for'' actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:1501:in `fields_for'' app/views/controller_actions/_form.html.erb:20:in `block in _app_views_controller_actions__form_html_erb__366592963_95670400'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `block in capture'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in `with_output_buffer'' actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `capture'' actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:435:in `form_for'' app/views/controller_actions/_form.html.erb:1:in `_app_views_controller_actions__form_html_erb__366592963_95670400'' actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in render'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in `instrument'' actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in `render'' actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:306:in `render_partial'' actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:279:in `block in render'' actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `block in instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' actionpack (4.0.0.beta1) lib/a ction_view/renderer/abstract_renderer.rb:23:in `instrument'' actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:278:in `render'' actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:41:in `render_partial'' actionpack (4.0.0.beta1) lib/action_view/helpers/rendering_helper.rb:27:in `render'' app/views/controller_actions/edit.html.erb:3:in `_app_views_controller_actions_edit_html_erb__785330494_92185850'' actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in render'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in `instrument'' actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in `render'' actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:49:in `block (2 levels) in render_template'' actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `block in instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' activesupport (4.0.0.beta1) lib /active_support/notifications/instrumenter.rb:20:in `instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `instrument'' actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:48:in `block in render_template'' actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:56:in `render_with_layout'' actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:47:in `render_template'' actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:17:in `render'' actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:36:in `render_template'' actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:17:in `render'' actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:119:in `_render_template'' actionpack (4.0.0.beta1) lib/action_controller/metal/streaming.rb:219:in `_render_template'' actionpack (4.0.0.beta1) lib/abst ract_controller/rendering.rb:112:in `render_to_body'' actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:33:in `render_to_body'' actionpack (4.0.0.beta1) lib/action_controller/metal/renderers.rb:26:in `render_to_body'' actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:97:in `render'' actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:16:in `render'' actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:41:in `block (2 levels) in render'' activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in `block in ms'' /home/john/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/benchmark.rb:296:in `realtime'' activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in `ms'' actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:41:in `block in render'' actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:84:in `cleanup_view_runtime'' activerecord (4.0.0.beta1) lib/active_record/railties/c ontroller_runtime.rb:24:in `cleanup_view_runtime'' actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:40:in `render'' actionpack (4.0.0.beta1) lib/action_controller/metal/implicit_render.rb:10:in `default_render'' actionpack (4.0.0.beta1) lib/action_controller/metal/implicit_render.rb:5:in `send_action'' actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:189:in `process_action'' actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:10:in `process_action'' actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:18:in `block in process_action'' activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:413:in `_run__68927184__process_action__callbacks'' activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in `run_callbacks'' actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:17:in `process_action'' actionpack (4.0.0.beta1) lib/action_controller/metal/rescue.rb:29:in `process_action'' actionpack (4.0.0.beta1) lib/action_controller/ metal/instrumentation.rb:31:in `block in process_action'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'' activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:30:in `process_action'' actionpack (4.0.0.beta1) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'' activerecord (4.0.0.beta1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'' actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:136:in `process'' actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:44:in `process'' actionpack (4.0.0.beta1) lib/action_controller/metal.rb:196:in `dispatch'' actionpack (4.0.0.beta1) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'' actionpack (4.0.0.beta1) lib/action_controller/metal.rb:232:in ` block in action'' actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in `dispatch'' actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:46:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:69:in `block in call'' actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in `each'' actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:651:in `call'' rack (1.5.2) lib/rack/etag.rb:23:in `call'' rack (1.5.2) lib/rack/conditionalget.rb:25:in `call'' rack (1.5.2) lib/rack/head.rb:11:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/params_parser.rb:27:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/flash.rb:241:in `call'' rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'' rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call '' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/cookies.rb:452:in `call'' activerecord (4.0.0.beta1) lib/active_record/query_cache.rb:36:in `call'' activerecord (4.0.0.beta1) lib/active_record/connection_adapters/abstract/connection_pool.rb:632:in `call'' activerecord (4.0.0.beta1) lib/active_record/migration.rb:348:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'' activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:373:in `_run__125207171__call__callbacks'' activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in `run_callbacks'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/reloader.rb:64:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middlewar e/show_exceptions.rb:30:in `call'' railties (4.0.0.beta1) lib/rails/rack/logger.rb:38:in `call_app'' railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `block in call'' activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in `block in tagged'' activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:25:in `tagged'' activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in `tagged'' railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/request_id.rb:21:in `call'' rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'' rack (1.5.2) lib/rack/runtime.rb:17:in `call'' activesupport (4.0.0.beta1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'' rack (1.5.2) lib/rack/lock.rb:17:in `call'' actionpack (4.0.0.beta1) lib/action_dispatch/middleware/static.rb:64:in `call'' railties (4.0.0.beta1) lib/rails/engine.rb:510:in `call'' railties (4.0.0.beta1) lib/rails/application.rb:96:in `call'' railtie s (4.0.0.beta1) lib/rails/railtie/configurable.rb:30:in `method_missing'' unicorn (4.6.2) lib/unicorn/http_server.rb:552:in `process_client'' unicorn (4.6.2) lib/unicorn/http_server.rb:632:in `worker_loop'' unicorn (4.6.2) lib/unicorn/http_server.rb:500:in `spawn_missing_workers'' unicorn (4.6.2) lib/unicorn/http_server.rb:511:in `maintain_worker_count'' unicorn (4.6.2) lib/unicorn/http_server.rb:277:in `join'' unicorn (4.6.2) bin/unicorn_rails:209:in `<top (required)>'' /home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in `load'' /home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in `<top (required)>'' ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in `debug_load'' ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in `debug_program'' ruby-debug-ide (0.4.17.beta16) bin/rdebug-ide:109:in `<top (required)>'' -e:1:in `load'' -e:1:in `<main>''> > > > > > Request > > Parameters: > > {"id"=>"1"} > > Toggle session dump (http://localhost:3100/controller_actions/1/edit#) > > > > Toggle env dump (http://localhost:3100/controller_actions/1/edit#) > > > > Response > > Headers: > > None > > > > Sorry about the verbosity but I am really struggling to solve this most basic use case. > > > > I have tried to figure out why the form builder returns an array but and would write my own if I could figure out how to. > > > > Any help appreciated. > -- > 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org (mailto:rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org). > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org (mailto:rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org). > To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/lyjS-Uad5VwJ. > For more options, visit https://groups.google.com/groups/opt_out. > >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
jleake-xLhkCMTzzpz10XsdtD+oqA@public.gmane.org
2013-Mar-24 15:26 UTC
Re: Rails 4.0 has_many_through and fields_for
Hi, That is what happens now in models/controller_action.rb
def initialized_interactions() # this is the key method
[].tap do |o|
Role.all.each do |r|
if p = interactions.find { |p| p.role_id == r.id }
o << p.tap { |p| p.enable ||= true }
else
o << Interaction.new(:role_id => r.id)
end
end
end
end
In rails 3.2 it just works. What should I return instead of an array ?
On Sunday, 24 March 2013 12:20:49 UTC,
jle...-xLhkCMTzzpz10XsdtD+oqA@public.gmane.org wrote:>
> Hi all, I am trying to reproduce rails 3.2 behaviour with fields_for and
> nested attributes.
>
> class ControllerAction < ActiveRecord::Base
> has_many :interactions, dependent: :destroy
> has_many :roles, through: :interactions
>
> scope :controllers, lambda {|name| where("controller_name_id =
?",
> name)}
> scope :actions, lambda {|name| where("action_name_id = ?",
name)}
>
> def initialized_interactions() # this is the key method
> [].tap do |o|
> Role.all.each do |r|
> if p = interactions.find { |p| p.role_id == r.id }
> o << p.tap { |p| p.enable ||= true }
> else
> o << Interaction.new(:role_id => r.id)
> end
> end
> end
> end
> end
>
> class Role < ActiveRecord::Base
> has_many :interactions
> end
>
> class Interaction < ActiveRecord::Base
> belongs_to :controller_action
> belongs_to :role
> attr_accessor :enable # nice little thingy here
> # It is now recommended to use strong params instead of
> ''attr_accessible :enable, :controller_action_id,
:role_id''
> end
>
> controller_actions_controller.rb
> ...
> private
> # Use callbacks to share common setup or constraints between
> actions.
> def set_controller_action
> @controller_action = ControllerAction.find(params[:id])
> end
>
> # Never trust parameters from the scary internet, only allow the
> white list through.
> def controller_action_params
> params.require(:controller_action).permit!
> end
>
> controller_actions view - excluding error code and most css formatting.
> _form.rb
>
> <%= form_for(@controller_action) do |f| %>
> ...
> <%= f.label :name %><br />
> <%= f.text_field :name %>
>
> <h2><%= f.label :role %></h2>
> <%= f.fields_for :interactions,
> @controller_action.initialized_interactions() do |builder| %>
> <% role = builder.object.role %>
> <%= builder.hidden_field :role_id %>
>
> <%= builder.check_box :enable %>
> <%= builder.label :enable, role.name %>
>
> <% end %>
>
> <%= f.submit %>
>
> <% end %>
>
> Under rails 3.2.11 I get a form that allows the user to edit roles.
> Editing controller_action
> Name
> Roles
> Webmaster
> Admin
> Moderator
> Editor
> Registered User
> Guest
> Show <http://localhost:3200/controller_actions/1> |
Back<http://localhost:3200/controller_actions>
>
> Under Rails 4.0 you get:-
>
> undefined method `role'' for #<Array:0xb875d4c>
>
> Extracted source (around line *#21*):
>
> 18192021222324
>
> <div>
> <h2><%= f.label :role %></h2>
> <%= f.fields_for :interactions,
@controller_action.initialized_interactions() do |builder| %>
> <% role = builder.object.role %>
> <%= builder.hidden_field :role_id %>
> <div class="field">
>
> Trace of template inclusion: app/views/controller_actions/edit.html.erb
>
> Rails.root: /home/john/RubyMineProjects/Rails/4.0/urps2
> Application Trace <http://localhost:3100/controller_actions/1/edit#>
| Framework
> Trace <http://localhost:3100/controller_actions/1/edit#> | Full
Trace<http://localhost:3100/controller_actions/1/edit#>
>
> app/views/controller_actions/_form.html.erb:21:in `block (2 levels) in
_app_views_controller_actions__form_html_erb__366592963_95670400''
> actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in
`block in capture''
> actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in
`with_output_buffer''
> actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in
`capture''
> actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:707:in
`fields_for''
> actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:1501:in
`fields_for''
> app/views/controller_actions/_form.html.erb:20:in `block in
_app_views_controller_actions__form_html_erb__366592963_95670400''
> actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in
`block in capture''
> actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in
`with_output_buffer''
> actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in
`capture''
> actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:435:in
`form_for''
> app/views/controller_actions/_form.html.erb:1:in
`_app_views_controller_actions__form_html_erb__366592963_95670400''
> actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in
render''
> activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in
`instrument''
> actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in
`render''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/partial_renderer.rb:306:in `render_partial''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/partial_renderer.rb:279:in `block in render''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/abstract_renderer.rb:23:in `block in
instrument''
> activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in
`block in instrument''
> activesupport (4.0.0.beta1)
lib/active_support/notifications/instrumenter.rb:20:in `instrument''
> activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in
`instrument''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/abstract_renderer.rb:23:in `instrument''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/partial_renderer.rb:278:in `render''
> actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:41:in
`render_partial''
> actionpack (4.0.0.beta1) lib/action_view/helpers/rendering_helper.rb:27:in
`render''
> app/views/controller_actions/edit.html.erb:3:in
`_app_views_controller_actions_edit_html_erb__785330494_92185850''
> actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in
render''
> activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in
`instrument''
> actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in
`render''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/template_renderer.rb:49:in `block (2 levels) in
render_template''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/abstract_renderer.rb:23:in `block in
instrument''
> activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in
`block in instrument''
> activesupport (4.0.0.beta1)
lib/active_support/notifications/instrumenter.rb:20:in `instrument''
> activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in
`instrument''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/abstract_renderer.rb:23:in `instrument''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/template_renderer.rb:48:in `block in
render_template''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/template_renderer.rb:56:in
`render_with_layout''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/template_renderer.rb:47:in `render_template''
> actionpack (4.0.0.beta1)
lib/action_view/renderer/template_renderer.rb:17:in `render''
> actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:36:in
`render_template''
> actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:17:in
`render''
> actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:119:in
`_render_template''
> actionpack (4.0.0.beta1) lib/action_controller/metal/streaming.rb:219:in
`_render_template''
> actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:112:in
`render_to_body''
> actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:33:in
`render_to_body''
> actionpack (4.0.0.beta1) lib/action_controller/metal/renderers.rb:26:in
`render_to_body''
> actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:97:in
`render''
> actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:16:in
`render''
> actionpack (4.0.0.beta1)
lib/action_controller/metal/instrumentation.rb:41:in `block (2 levels) in
render''
> activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in
`block in ms''
> /home/john/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/benchmark.rb:296:in
`realtime''
> activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in
`ms''
> actionpack (4.0.0.beta1)
lib/action_controller/metal/instrumentation.rb:41:in `block in render''
> actionpack (4.0.0.beta1)
lib/action_controller/metal/instrumentation.rb:84:in
`cleanup_view_runtime''
> activerecord (4.0.0.beta1)
lib/active_record/railties/controller_runtime.rb:24:in
`cleanup_view_runtime''
> actionpack (4.0.0.beta1)
lib/action_controller/metal/instrumentation.rb:40:in `render''
> actionpack (4.0.0.beta1)
lib/action_controller/metal/implicit_render.rb:10:in `default_render''
> actionpack (4.0.0.beta1)
lib/action_controller/metal/implicit_render.rb:5:in `send_action''
> actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:189:in
`process_action''
> actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:10:in
`process_action''
> actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:18:in `block
in process_action''
> activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:413:in
`_run__68927184__process_action__callbacks''
> activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in
`run_callbacks''
> actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:17:in
`process_action''
> actionpack (4.0.0.beta1) lib/action_controller/metal/rescue.rb:29:in
`process_action''
> actionpack (4.0.0.beta1)
lib/action_controller/metal/instrumentation.rb:31:in `block in
process_action''
> activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in
`block in instrument''
> activesupport (4.0.0.beta1)
lib/active_support/notifications/instrumenter.rb:20:in `instrument''
> activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in
`instrument''
> actionpack (4.0.0.beta1)
lib/action_controller/metal/instrumentation.rb:30:in `process_action''
> actionpack (4.0.0.beta1)
lib/action_controller/metal/params_wrapper.rb:245:in `process_action''
> activerecord (4.0.0.beta1)
lib/active_record/railties/controller_runtime.rb:18:in `process_action''
> actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:136:in
`process''
> actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:44:in
`process''
> actionpack (4.0.0.beta1) lib/action_controller/metal.rb:196:in
`dispatch''
> actionpack (4.0.0.beta1)
lib/action_controller/metal/rack_delegation.rb:13:in `dispatch''
> actionpack (4.0.0.beta1) lib/action_controller/metal.rb:232:in `block in
action''
> actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in
`call''
> actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in
`dispatch''
> actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:46:in
`call''
> actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:69:in `block
in call''
> actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in
`each''
> actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in
`call''
> actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:651:in
`call''
> rack (1.5.2) lib/rack/etag.rb:23:in `call''
> rack (1.5.2) lib/rack/conditionalget.rb:25:in `call''
> rack (1.5.2) lib/rack/head.rb:11:in `call''
> actionpack (4.0.0.beta1)
lib/action_dispatch/middleware/params_parser.rb:27:in `call''
> actionpack (4.0.0.beta1) lib/action_dispatch/middleware/flash.rb:241:in
`call''
> rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context''
> rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call''
> actionpack (4.0.0.beta1) lib/action_dispatch/middleware/cookies.rb:452:in
`call''
> activerecord (4.0.0.beta1) lib/active_record/query_cache.rb:36:in
`call''
> activerecord (4.0.0.beta1)
lib/active_record/connection_adapters/abstract/connection_pool.rb:632:in
`call''
> activerecord (4.0.0.beta1) lib/active_record/migration.rb:348:in
`call''
> actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:29:in
`block in call''
> activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:373:in
`_run__125207171__call__callbacks''
> activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in
`run_callbacks''
> actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:27:in
`call''
> actionpack (4.0.0.beta1) lib/action_dispatch/middleware/reloader.rb:64:in
`call''
> actionpack (4.0.0.beta1) lib/action_dispatch/middleware/remote_ip.rb:76:in
`call''
> actionpack (4.0.0.beta1)
lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call''
> actionpack (4.0.0.beta1)
lib/action_dispatch/middleware/show_exceptions.rb:30:in `call''
> railties (4.0.0.beta1) lib/rails/rack/logger.rb:38:in `call_app''
> railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `block in
call''
> activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in
`block in tagged''
> activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:25:in
`tagged''
> activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in
`tagged''
> railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `call''
> actionpack (4.0.0.beta1) lib/action_dispatch/middleware/request_id.rb:21:in
`call''
> rack (1.5.2) lib/rack/methodoverride.rb:21:in `call''
> rack (1.5.2) lib/rack/runtime.rb:17:in `call''
> activesupport (4.0.0.beta1)
lib/active_support/cache/strategy/local_cache.rb:72:in `call''
> rack (1.5.2) lib/rack/lock.rb:17:in `call''
> actionpack (4.0.0.beta1) lib/action_dispatch/middleware/static.rb:64:in
`call''
> railties (4.0.0.beta1) lib/rails/engine.rb:510:in `call''
> railties (4.0.0.beta1) lib/rails/application.rb:96:in `call''
> railties (4.0.0.beta1) lib/rails/railtie/configurable.rb:30:in
`method_missing''
> unicorn (4.6.2) lib/unicorn/http_server.rb:552:in `process_client''
> unicorn (4.6.2) lib/unicorn/http_server.rb:632:in `worker_loop''
> unicorn (4.6.2) lib/unicorn/http_server.rb:500:in
`spawn_missing_workers''
> unicorn (4.6.2) lib/unicorn/http_server.rb:511:in
`maintain_worker_count''
> unicorn (4.6.2) lib/unicorn/http_server.rb:277:in `join''
> unicorn (4.6.2) bin/unicorn_rails:209:in `<top (required)>''
> /home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in
`load''
> /home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in `<top
(required)>''
> ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in
`debug_load''
> ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in
`debug_program''
> ruby-debug-ide (0.4.17.beta16) bin/rdebug-ide:109:in `<top
(required)>''
> -e:1:in `load''
> -e:1:in `<main>''
>
> Request
>
> *Parameters*:
>
> {"id"=>"1"}
>
> Toggle session dump
<http://localhost:3100/controller_actions/1/edit#>
> Toggle env dump <http://localhost:3100/controller_actions/1/edit#>
> Response
>
> *Headers*:
>
> None
>
>
> Sorry about the verbosity but I am really struggling to solve this most
> basic use case.
>
> I have tried to figure out why the form builder returns an array but and
> would write my own if I could figure out how to.
>
> Any help appreciated.
>
--
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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-/dy2vSEUnoA4J.
For more options, visit https://groups.google.com/groups/opt_out.
jleake-xLhkCMTzzpz10XsdtD+oqA@public.gmane.org
2013-Mar-27 16:26 UTC
SOLVED - Re: Rails 4.0 has_many_through and fields_for
See https://github.com/ozpos/urps2 - use case 1 On Sunday, 24 March 2013 12:20:49 UTC, jle...-xLhkCMTzzpz10XsdtD+oqA@public.gmane.org wrote:> > Hi all, I am trying to reproduce rails 3.2 behaviour with fields_for and > nested attributes. > > class ControllerAction < ActiveRecord::Base > has_many :interactions, dependent: :destroy > has_many :roles, through: :interactions > > scope :controllers, lambda {|name| where("controller_name_id = ?", > name)} > scope :actions, lambda {|name| where("action_name_id = ?", name)} > > def initialized_interactions() # this is the key method > [].tap do |o| > Role.all.each do |r| > if p = interactions.find { |p| p.role_id == r.id } > o << p.tap { |p| p.enable ||= true } > else > o << Interaction.new(:role_id => r.id) > end > end > end > end > end > > class Role < ActiveRecord::Base > has_many :interactions > end > > class Interaction < ActiveRecord::Base > belongs_to :controller_action > belongs_to :role > attr_accessor :enable # nice little thingy here > # It is now recommended to use strong params instead of > ''attr_accessible :enable, :controller_action_id, :role_id'' > end > > controller_actions_controller.rb > ... > private > # Use callbacks to share common setup or constraints between > actions. > def set_controller_action > @controller_action = ControllerAction.find(params[:id]) > end > > # Never trust parameters from the scary internet, only allow the > white list through. > def controller_action_params > params.require(:controller_action).permit! > end > > controller_actions view - excluding error code and most css formatting. > _form.rb > > <%= form_for(@controller_action) do |f| %> > ... > <%= f.label :name %><br /> > <%= f.text_field :name %> > > <h2><%= f.label :role %></h2> > <%= f.fields_for :interactions, > @controller_action.initialized_interactions() do |builder| %> > <% role = builder.object.role %> > <%= builder.hidden_field :role_id %> > > <%= builder.check_box :enable %> > <%= builder.label :enable, role.name %> > > <% end %> > > <%= f.submit %> > > <% end %> > > Under rails 3.2.11 I get a form that allows the user to edit roles. > Editing controller_action > Name > Roles > Webmaster > Admin > Moderator > Editor > Registered User > Guest > Show <http://localhost:3200/controller_actions/1> | Back<http://localhost:3200/controller_actions> > > Under Rails 4.0 you get:- > > undefined method `role'' for #<Array:0xb875d4c> > > Extracted source (around line *#21*): > > 18192021222324 > > <div> > <h2><%= f.label :role %></h2> > <%= f.fields_for :interactions, @controller_action.initialized_interactions() do |builder| %> > <% role = builder.object.role %> > <%= builder.hidden_field :role_id %> > <div class="field"> > > Trace of template inclusion: app/views/controller_actions/edit.html.erb > > Rails.root: /home/john/RubyMineProjects/Rails/4.0/urps2 > Application Trace <http://localhost:3100/controller_actions/1/edit#> | Framework > Trace <http://localhost:3100/controller_actions/1/edit#> | Full Trace<http://localhost:3100/controller_actions/1/edit#> > > app/views/controller_actions/_form.html.erb:21:in `block (2 levels) in _app_views_controller_actions__form_html_erb__366592963_95670400'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `block in capture'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in `with_output_buffer'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `capture'' > actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:707:in `fields_for'' > actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:1501:in `fields_for'' > app/views/controller_actions/_form.html.erb:20:in `block in _app_views_controller_actions__form_html_erb__366592963_95670400'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `block in capture'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:200:in `with_output_buffer'' > actionpack (4.0.0.beta1) lib/action_view/helpers/capture_helper.rb:38:in `capture'' > actionpack (4.0.0.beta1) lib/action_view/helpers/form_helper.rb:435:in `form_for'' > app/views/controller_actions/_form.html.erb:1:in `_app_views_controller_actions__form_html_erb__366592963_95670400'' > actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in render'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in `render'' > actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:306:in `render_partial'' > actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:279:in `block in render'' > actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `block in instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/renderer/partial_renderer.rb:278:in `render'' > actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:41:in `render_partial'' > actionpack (4.0.0.beta1) lib/action_view/helpers/rendering_helper.rb:27:in `render'' > app/views/controller_actions/edit.html.erb:3:in `_app_views_controller_actions_edit_html_erb__785330494_92185850'' > actionpack (4.0.0.beta1) lib/action_view/template.rb:143:in `block in render'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:160:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/template.rb:141:in `render'' > actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:49:in `block (2 levels) in render_template'' > actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `block in instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/renderer/abstract_renderer.rb:23:in `instrument'' > actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:48:in `block in render_template'' > actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:56:in `render_with_layout'' > actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:47:in `render_template'' > actionpack (4.0.0.beta1) lib/action_view/renderer/template_renderer.rb:17:in `render'' > actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:36:in `render_template'' > actionpack (4.0.0.beta1) lib/action_view/renderer/renderer.rb:17:in `render'' > actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:119:in `_render_template'' > actionpack (4.0.0.beta1) lib/action_controller/metal/streaming.rb:219:in `_render_template'' > actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:112:in `render_to_body'' > actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:33:in `render_to_body'' > actionpack (4.0.0.beta1) lib/action_controller/metal/renderers.rb:26:in `render_to_body'' > actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:97:in `render'' > actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:16:in `render'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:41:in `block (2 levels) in render'' > activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in `block in ms'' > /home/john/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/benchmark.rb:296:in `realtime'' > activesupport (4.0.0.beta1) lib/active_support/core_ext/benchmark.rb:5:in `ms'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:41:in `block in render'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:84:in `cleanup_view_runtime'' > activerecord (4.0.0.beta1) lib/active_record/railties/controller_runtime.rb:24:in `cleanup_view_runtime'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:40:in `render'' > actionpack (4.0.0.beta1) lib/action_controller/metal/implicit_render.rb:10:in `default_render'' > actionpack (4.0.0.beta1) lib/action_controller/metal/implicit_render.rb:5:in `send_action'' > actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:189:in `process_action'' > actionpack (4.0.0.beta1) lib/action_controller/metal/rendering.rb:10:in `process_action'' > actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:18:in `block in process_action'' > activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:413:in `_run__68927184__process_action__callbacks'' > activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in `run_callbacks'' > actionpack (4.0.0.beta1) lib/abstract_controller/callbacks.rb:17:in `process_action'' > actionpack (4.0.0.beta1) lib/action_controller/metal/rescue.rb:29:in `process_action'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `block in instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'' > activesupport (4.0.0.beta1) lib/active_support/notifications.rb:158:in `instrument'' > actionpack (4.0.0.beta1) lib/action_controller/metal/instrumentation.rb:30:in `process_action'' > actionpack (4.0.0.beta1) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'' > activerecord (4.0.0.beta1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'' > actionpack (4.0.0.beta1) lib/abstract_controller/base.rb:136:in `process'' > actionpack (4.0.0.beta1) lib/abstract_controller/rendering.rb:44:in `process'' > actionpack (4.0.0.beta1) lib/action_controller/metal.rb:196:in `dispatch'' > actionpack (4.0.0.beta1) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'' > actionpack (4.0.0.beta1) lib/action_controller/metal.rb:232:in `block in action'' > actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:78:in `dispatch'' > actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:46:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:69:in `block in call'' > actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in `each'' > actionpack (4.0.0.beta1) lib/action_dispatch/journey/router.rb:57:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/routing/route_set.rb:651:in `call'' > rack (1.5.2) lib/rack/etag.rb:23:in `call'' > rack (1.5.2) lib/rack/conditionalget.rb:25:in `call'' > rack (1.5.2) lib/rack/head.rb:11:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/params_parser.rb:27:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/flash.rb:241:in `call'' > rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'' > rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/cookies.rb:452:in `call'' > activerecord (4.0.0.beta1) lib/active_record/query_cache.rb:36:in `call'' > activerecord (4.0.0.beta1) lib/active_record/connection_adapters/abstract/connection_pool.rb:632:in `call'' > activerecord (4.0.0.beta1) lib/active_record/migration.rb:348:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'' > activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:373:in `_run__125207171__call__callbacks'' > activesupport (4.0.0.beta1) lib/active_support/callbacks.rb:78:in `run_callbacks'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/reloader.rb:64:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'' > railties (4.0.0.beta1) lib/rails/rack/logger.rb:38:in `call_app'' > railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `block in call'' > activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in `block in tagged'' > activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:25:in `tagged'' > activesupport (4.0.0.beta1) lib/active_support/tagged_logging.rb:67:in `tagged'' > railties (4.0.0.beta1) lib/rails/rack/logger.rb:21:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/request_id.rb:21:in `call'' > rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'' > rack (1.5.2) lib/rack/runtime.rb:17:in `call'' > activesupport (4.0.0.beta1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'' > rack (1.5.2) lib/rack/lock.rb:17:in `call'' > actionpack (4.0.0.beta1) lib/action_dispatch/middleware/static.rb:64:in `call'' > railties (4.0.0.beta1) lib/rails/engine.rb:510:in `call'' > railties (4.0.0.beta1) lib/rails/application.rb:96:in `call'' > railties (4.0.0.beta1) lib/rails/railtie/configurable.rb:30:in `method_missing'' > unicorn (4.6.2) lib/unicorn/http_server.rb:552:in `process_client'' > unicorn (4.6.2) lib/unicorn/http_server.rb:632:in `worker_loop'' > unicorn (4.6.2) lib/unicorn/http_server.rb:500:in `spawn_missing_workers'' > unicorn (4.6.2) lib/unicorn/http_server.rb:511:in `maintain_worker_count'' > unicorn (4.6.2) lib/unicorn/http_server.rb:277:in `join'' > unicorn (4.6.2) bin/unicorn_rails:209:in `<top (required)>'' > /home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in `load'' > /home/john/.rvm/gems/ruby-2.0.0-p0@rails-4/bin/unicorn_rails:23:in `<top (required)>'' > ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in `debug_load'' > ruby-debug-ide (0.4.17.beta16) lib/ruby-debug-ide.rb:86:in `debug_program'' > ruby-debug-ide (0.4.17.beta16) bin/rdebug-ide:109:in `<top (required)>'' > -e:1:in `load'' > -e:1:in `<main>'' > > Request > > *Parameters*: > > {"id"=>"1"} > > Toggle session dump <http://localhost:3100/controller_actions/1/edit#> > Toggle env dump <http://localhost:3100/controller_actions/1/edit#> > Response > > *Headers*: > > None > > > Sorry about the verbosity but I am really struggling to solve this most > basic use case. > > I have tried to figure out why the form builder returns an array but and > would write my own if I could figure out how to. > > Any help appreciated. >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/H7W_RXFhnPQJ. For more options, visit https://groups.google.com/groups/opt_out.