Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Friendly_id and impressionist 1.0.1 not recording impressionable id #27

Closed
adanacs opened this Issue · 8 comments

6 participants

@adanacs

I saw in the other issue (#22) from a couple of months ago where this was working on rails 3.1.2. I have the same setup other than I have Rails 3.1.3, however it doesn't seem to be working for me - impressionist records the id just fine if I go to

.../article/13

but not

..article/title-of-article

I'm using Rails 3.1.3, Friendly_id 4.0.0-beta14 and impressionist 1.0.1

I'm wondering if you have any pointers for me on where to start looking and yes I have restarted the server :)

@bartekrycharski

Same problem here. Any ideas?

@bartekrycharski

before_filter :only => [:show] do |controller|
params[:id] = @video.id
end

impressionist :actions => [:show]

Kind of ugly but it works now.

@pekpon

I have the same problem in Rails 3.2.0...

@JapArt

I have the same problem with Rails 3.2.1

@andreydjason

Yep, having the same issue here, using friendly_id with slugged. Rails 3.1.1

UPDATE
Well, my option was to change the behavior of impressionist.
First changed the column impressionable_id to string.
Modified impressionable.rb, in line 13 I added:

if self.respond_to?(:friendly_id)
  has_many :impressions, :as => :impressionable, :finder_sql => Proc.new {
    %Q{
      SELECT `impressions`.* FROM `impressions` WHERE `impressions`.`impressionable_id` = '#{slug}' AND `impressions`.`impressionable_type` = '#{self.class.to_s}'
    }
  }
else
  has_many :impressions, :as => :impressionable
end

This is not the best workaround, but works for me, maybe because I'm using impressionist in a "default" way for most of my models and controllers, but maybe not work in other situations. If someone know a better way to do that, please tell us :)

Another caveat, the specific SQL above sometimes return wrong, if for example you do @object.impressions.to_sql will return a wrong SQL, BTW @object.impressions will return the correct objects.

UPDATE2
The impressionist_count method broken with "select", this is baaad...
For now I've commented the lines 47 to 49 (the line numbers change with the add above) in the impressionist_count method to work for me, while cant find a workaround.

UPDATE3
For this situation, it needs to change to the impressionist_count method, set imps.all.size to imps.count (I dont know if I'm right, but this improve the SQL too)

Maybe someone find a better way to improve all this "behaviors" that are really dirty... thanks

@pekpon

I do this, in the controller:

def show
@article = Article.find(params[:id])
impressionist(@article)
end

and its ok!

@andreydjason

thanks

@JapArt

Works for me too. Thanks!

@acnalesso acnalesso closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.