Sorry Jan, I understand your problem now new_model is needed for search form because rails helpers may need a record to read current value. And new_model is filling some fields for STI models or nested scaffolds, which cause your issue. Not sure if it's easy to fix in activescaffold without breaking other use cases, you could workaround in your erratum controller overriding new_model:
def new_model nested? && nested.association.through? ? Erratum.new : super end Or simply, return Erratum.new always: def new_model Erratum.new end El martes, 4 de julio de 2017 5:02:14 (CEST) Jan Hebler escribió: > Am Montag, 3. Juli 2017 22:20:30 UTC+2 schrieb Sergio Cambra: > > ensure_not_nested must be a method in your app, I don't find it in > > activescaffold code. > > No, Sorry. ensure_not_nested is an Method in active_record. Please see the > Stacktrace here: > > [93, 102] in > /usr/lib64/ruby/gems/2.2.0/gems/activerecord-5.1.2/lib/active_record/associa > tions/has_many_through_association.rb 93: end > 94: > 95: def build_record(attributes) > 96: # ensure_not_nested > 97: byebug > => 98: record = super(attributes) > 99: > 100: inverse = source_reflection.inverse_of > 101: if inverse > 102: if inverse.collection? > (byebug) where > --> #0 > ActiveRecord::Associations::HasManyThroughAssociation.build_record(attribute > s#Hash) at > /usr/lib64/ruby/gems/2.2.0/gems/activerecord-5.1.2/lib/active_record/associa > tions/has_many_through_association.rb:98 #1 > ActiveRecord::Associations::CollectionAssociation.build(attributes#Hash, > &block#NilClass) at > /usr/lib64/ruby/gems/2.2.0/gems/activerecord-5.1.2/lib/active_record/associa > tions/collection_association.rb:99 #2 block in > ActiveRecord::AssociationRelation.block in > build(*args#Array, &block#NilClass) at > /usr/lib64/ruby/gems/2.2.0/gems/activerecord-5.1.2/lib/active_record/associa > tion_relation.rb:17 #3 ActiveRecord::Relation.scoping at > /usr/lib64/ruby/gems/2.2.0/gems/activerecord-5.1.2/lib/active_record/relatio > n.rb:336 #4 ActiveRecord::AssociationRelation.build(*args#Array, > &block#NilClass) at > /usr/lib64/ruby/gems/2.2.0/gems/activerecord-5.1.2/lib/active_record/associa > tion_relation.rb:17 #5 ActiveScaffold::Actions::Core.new_model at > /home/jan/src/cmdbfe/vendor/cache/active_scaffold-03dbc4ac900e/lib/active_sc > affold/actions/core.rb:266 > > There you could see my "fix" to. Everything is working if i comment out the > ensure_not_nested-Method, but i think that this is not the way to go :-) > > You could avoid calling it when action name is index, or move out of > > > new_model method and add it as before_action only in needed actions. > > ActiveScaffold needs to build @record to display search form, so it you > > need search form, new_model must work. > > As my Application should mainly be used for reporting and searching, > avoiding the search form is not really an option. > > Thanks, Jan > > > El lunes, 3 de julio de 2017, 22:17:02 (UTC+2), Jan Hebler escribió: > >> Hi > >> > >> I have an rather complex Data-Model: > >> > >> class Node > >> > >> has_one :node2server > >> has_one :server, :through => node2server > >> has_many :errata, through => :server > >> > >> end > >> class Node2server > >> > >> belongs_to :node > >> belongs_to :server > >> > >> end > >> class Server > >> > >> has_one :node2server > >> has_one :node > >> has_and_belongs_to_many :errata > >> > >> end > >> class Erratum > >> > >> has_and_belongs_to_many :servers > >> has_many :node2servers > >> > >> end > >> > >> These are two Legacy-Applications (one CMDB and one Patchmanagement). > >> > >> It seems that the new_model Method is always called in the > >> > >> _list_with_header.html.erb: > >> 7: <% if active_scaffold_config.list.always_show_search %> > >> 8: <% old_record, @record = @record, new_model %> > >> > >> which in turn calls build_record in > >> active_record/associations/has_many_through_association.rb. Build_record > >> call ensure_not_nested and this throws an > >> HasManyThroughNestedAssociationsAreReadonly-Exception. How could i avoid > >> this? I dont need writable Associations. > >> > >> Thanks, Jan -- You received this message because you are subscribed to the Google Groups "ActiveScaffold : Ruby on Rails Gem" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/activescaffold. For more options, visit https://groups.google.com/d/optout.
