Как получить ссылку для правильного действия контроллера? - PullRequest
0 голосов
/ 02 апреля 2011

У меня есть has_many, благодаря связи между видео и темами с темами в качестве независимого ресурса. Я хочу иметь ссылку, которая удаляет эту конкретную запись, имеющую отношение к теме, также как ассоциацию, а НЕ видео или тему.

У меня есть этот метод в моем контроллере топиков:

def destroy
  @topicable = Topicable.find(params[:id])
  @topicable.destroy
  respond_to do |format|
    format.html {redirect_to @video}
    format.js
  end
end

Я хочу вызвать вышеуказанный метод по этой ссылке в моем видеопоказе:

<%= link_to "x", @topicable, :method => :delete, :class => 'topic_delete' %>

Однако это не делает то, что я хочу. Вместо этого, кажется, ударил действие удаления контроллера видео и удалить как видео, так и ассоциации, а не только ассоциации, что я и хочу. Это журналы:

Started POST "/videos/468" for 127.0.0.1 at Fri Apr 01 19:15:07 -0700 2011
  Processing by VideosController#destroy as HTML
  Parameters: {"authenticity_token"=>"F2uF4FDDSPw+jHHGtsosGLjHwkDUg/nre5u+WEPPDUY=", "id"=>"468"}
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 57 LIMIT 1
  Video Load (0.3ms)  SELECT "videos".* FROM "videos" WHERE "videos"."id" = 468 AND ("videos".user_id = 57) ORDER BY videos.rank_sum DESC LIMIT 1
  Genre Load (0.3ms)  SELECT * FROM "genres" INNER JOIN "genres_videos" ON "genres".id = "genres_videos".genre_id WHERE ("genres_videos".video_id = 468 )
  Topicable Load (0.3ms)  SELECT "topicables".* FROM "topicables" WHERE ("topicables".video_id = 468)
  AREL (0.4ms)  DELETE FROM "topicables" WHERE "topicables"."id" = 93
  AREL (0.1ms)  DELETE FROM "topicables" WHERE "topicables"."id" = 94
  AREL (0.1ms)  DELETE FROM "videos" WHERE "videos"."id" = 468
Redirected to http://localhost:3000/videos
Completed 302 Found in 181ms

Как мне решить эту проблему?

Вот модель видео:

validates :video_url, :presence => true
validates :title, :presence => true

belongs_to :user 
has_many :video_votes
has_many :voted_users, :through => :video_votes, :source => :user
has_and_belongs_to_many :genres
has_many :topicables, :dependent => :destroy
has_many :topics, :through => :topicables

attr_accessor :topic_names
after_save :assign_topics
before_update :update_rank_sum
default_scope order('videos.rank_sum DESC')

def assign_topics
  if @topic_names
    self.topics << @topic_names.map do |name|
      Topic.find_or_create_by_name(name)
    end
  end
end

Топичная модель:

belongs_to :video
belongs_to :topic

1 Ответ

0 голосов
/ 02 апреля 2011

Если @topicable относится к Video объекту, то он перейдет к VideosController. Вам необходимо указать путь вручную:

<%= link_to "x", topicable_path(@topicable), ... %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...