GRR I thought I had this all done but now I getting the following error on 
an edit page, note prior to this I was playing around with creating a new 
record

NoMethodError in Machines#edit

Showing *controller: machines; dryml-tag: edit-page* where line *#1* raised:

undefined method `complete_select_model_machine_path' for 
#<#<Class:0x00000005b071d8>:0x00000005b0e028>

The path the auto completer in my mode is creating is 

complete_select_model_machines GET   
 /machines/complete_select_model(.:format)                   
 machines#complete_select_model

Note the plural on the machines but the edit form is looking for 
the singular form.

My dryml is using the following

       <machine-model-view:>
<name-one complete-target="&@machine" completer="select_model"/>
       </machine-model-view:>

as part of the machine form tag.

Bob

On Wednesday, October 10, 2012 10:30:52 AM UTC-4, Bob Sleys wrote:
>
> Ok one more follow up on this for anyone else following this
>
> Since I'm returning a string that is a composite of two fields across two 
> models and I'm overiding the name of the model to do the same there is no 
> proper automatic find_by_name so I had to provide my own.
>
> That probably wasn't very clear so here are the details.
>
> In my model MachineModel I don't have an automatic name field.  Instead I 
> provided my own
>
>   def name
>     "#{manufacturer.name} - #{model_of_machine}"
>   end
>
> since my name is comprised of both a field on the MachineModel and a field 
> in the model Manufacturer an automatic find_by_name won't work so I had to 
> create my own like so.
>
>   def self.find_by_name(query)
>     query = query.split(' - ').map {|term| "%#{term}%" }
>     sql = 
> self.includes(:manufacturer).where(Manufacturer.arel_table[:name].matches(query[0]))
>     sql = 
> sql.where(MachineModel.arel_table[:model_of_machine].matches(query[1])) if 
> query[1] 
>     sql.first
>   end
>
> Note I split on the - this time because my name uses it to separate the 
> two fields.  This will be a problem if a manufacturer name has a dash in 
> it.  (don't know a good way to avoid that.
>
> This was all required because of the name-one the Bryan helped me with.
>
> In my Machine form I have
> <machine-model-view:>
> <name-one complete-target="&@machine" completer="select_model"/>
> </machine-model-view:>
>
> This create a text box with auto complete which calls the autocompleter in 
> the machine controller
>
> autocomplete :select_model do
>       hobo_completions :name, MachineModel.scoped()
> end
>
> This in turn calls the name_contains in MachineModel
>
>   def self.name_contains(query) 
>     query = query.split.map {|term| "%#{term}%" }
>     sql = 
> self.includes(:manufacturer).where(Manufacturer.arel_table[:name].matches(query[0]))
>     sql = 
> sql.where(MachineModel.arel_table[:model_of_machine].matches(query[1])) if 
> query[1] 
>     sql
>   end 
>
> Note since the name was defined to return the manufacture - machine_model 
> it's that string that is used to save the machine record.  When saving the 
> new machine record it needs to find the corresponding machine_model record 
> to get it's id.  Thus the need for the find_by_name I began with.
>
> Hope that name some sense, for when I try this again in 6 months and 
> forget all the details other than "I did that once before:.
>
> Bob
>
> On Wednesday, October 10, 2012 9:56:26 AM UTC-4, Bob Sleys wrote:
>>
>> Thank you very much.  
>>
>> FYI though this could probably be improved this is what I ened up with in 
>> my model
>>
>>   def self.manufacturer_model_contains(query) 
>>     query = query.split.map {|term| "%#{term}%" }
>>     sql = 
>> self.includes(:manufacturer).where(Manufacturer.arel_table[:name].matches(query[0]))
>>     sql = 
>> sql.where(MachineModel.arel_table[:model_of_machine].matches(query[1])) if 
>> query[1] 
>>     sql
>>   end 
>>
>> Bob
>>
>> On Wednesday, October 10, 2012 3:36:57 AM UTC-4, Bryan Larsen wrote:
>>>
>>> On Tue, Oct 9, 2012 at 3:09 PM, Bob Sleys <[email protected]> wrote: 
>>> > Ok getting closer 
>>> > 
>>> > Now I getting the following error 
>>> > 
>>> > undefined method `manufacturer_model_contains' for 
>>> > #<ActiveRecord::Relation:0x00000006c13350> 
>>> > 
>>> > 
>>> > Do I need to add a method to my model to handle it?  If so what would 
>>> it 
>>> > look like.  IE is it doing to search for the query string? 
>>>
>>> That's right.  http://cookbook.hobocentral.net/manual/scopes#_contains 
>>>
>>> You can do it with: 
>>>
>>> def self.manufacturer_model_contains(query) 
>>>     
>>> self.includes(:manufacturer).where(Manufactuer.arel_table[:name].matches(query))
>>>  
>>>
>>> + self.model_of_machine_contains(q) 
>>> end 
>>>
>>> Note how I'm using AREL for the first clause.   That way it will 
>>> automatically switch to ILIKE in postgres. 
>>>
>>> One thing the above doesn't do is split your query: if the user 
>>> supplies a search for both the model & manufacturer, it will fail. 
>>> This shows how to do that: 
>>>
>>>
>>> http://stackoverflow.com/questions/4027276/help-with-rails-active-record-querying-like-clause
>>>  
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/hobousers/-/nJZd8cpOMmsJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/hobousers?hl=en.

Reply via email to