Ruby on rails 链接时缺少必需的键
所以,我有一个应用程序,有电影工作室,电影和剪辑。每个工作室都有一个相关的电影,每个电影都有相关的剪辑。此内容仅由网站管理员上传。现在,用户可以观看电影中的各种剪辑,每次用户观看剪辑时,都会产生一种“印象”。我用印象派的宝石来跟踪每个剪辑的视图。这与我的下一点有关 在管理后端,我想让管理员选择一个剪辑,并选择一个日期范围,然后当他们点击过滤器,它将显示所有的用户谁查看了该范围内的剪辑 我有一个表格格式的工作,但是,我不能显示一个链接到实际的电影或剪辑,我可以显示一个链接到np的工作室 我做错了什么Ruby on rails 链接时缺少必需的键,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,所以,我有一个应用程序,有电影工作室,电影和剪辑。每个工作室都有一个相关的电影,每个电影都有相关的剪辑。此内容仅由网站管理员上传。现在,用户可以观看电影中的各种剪辑,每次用户观看剪辑时,都会产生一种“印象”。我用印象派的宝石来跟踪每个剪辑的视图。这与我的下一点有关 在管理后端,我想让管理员选择一个剪辑,并选择一个日期范围,然后当他们点击过滤器,它将显示所有的用户谁查看了该范围内的剪辑 我有一个表格格式的工作,但是,我不能显示一个链接到实际的电影或剪辑,我可以显示一个链接到np的工作室 我做错了什
<% if @impressions %>
<table>
<tr>
<th>Studio</th>
<th>Film</th>
<th>Clip</th>
</tr>
<% @impressions.each do |impression| -%>
<% @clip = Clip.where(id: impression.impressionable_id).first %>
<% @user = User.where(id: impression.user_id).first %>
<tr>
<th>
<%= link_to @clip.film.studio.name, saas_admin_studio_path(@clip.film.studio) %> < --- works fine!
</th>
<th>
<%= link_to @clip.film.name, saas_admin_studio_film_path(@clip.film) %> <--- doesn't work (see error #1)
</th>
<th>
<%= link_to @clip.name, saas_admin_studio_film_clips_path(@clip) %> <--- doesn't work (see error #2)
</th>
<% end -%>
<% end -%>
如果你看到自己的错误,他们会说: 缺少必需的密钥:[:id] 缺少所需的钥匙:[:胶片id] 因此,问题是您的路由是嵌套的,并且您没有传递完整的信息以形成正确的路由。请尝试以下链接:
<%= link_to @clip.film.name, saas_admin_studio_film_path(@clip.film.studio, @clip.film) %>
<%= link_to @clip.name, saas_admin_studio_film_clips_path(@clip.film.studio ,@clip.film) %>
它们之间有什么关联,你能发布rake路由的输出吗?我已经用适当的模型更新了帖子,显示了关联。另外,rake路由相当长,但我上面发布的路径是正确的。我想我知道问题所在,但需要确定这就是为什么要求您发布路由。您可以通过执行rake routes controller=controller\u name
来检查控制器特定的路由,因此它不会给您一个很长的列表:)如果这些仍然不起作用,那么需要查看您的路由使用路由更新,我现在将查看此答案:)啊,我们非常接近了!clip.film.name成功了。。但是第二个clip.name返回了以下内容:ouldn't find Studio id=blab Extracted source(在第72行附近):def load_parents@Studio=Studio.find(params[:Studio_id])@sonnyback yeah更新了第二个。我传递了错误的变量,这就是为什么我要求路由:)
ActionController::UrlGenerationError in SaasAdmin::Statistics#search
Showing /Users/me/Sites/multi/app/views/saas_admin/statistics/index.html.erb where line #60 raised:
No route matches {:action=>"index", :controller=>"saas_admin/clips", :film_id=>nil, :format=>nil, :studio_id=>#<Clip id: 1, name: "test", sort_name: "test", permalink: "test", description: "<p>test</p>", duration: nil, film_id: 5, active: true, trackable: true, view_count: nil, status: nil, thumbnail_remote_file: "", created_at: "2014-07-25 01:22:12", updated_at: "2014-07-25 01:22:12", thumbnail_file_name: "ABeautifulMind-ManySolutions.png", thumbnail_content_type: "image/png", thumbnail_file_size: 331462, thumbnail_updated_at: "2014-07-25 01:22:11", impressions_count: 5, position: 1>} missing required keys: [:film_id]
class Studio < ActiveRecord::Base
# attr_accessible :name, :code, :active, :trackable
after_save ThinkingSphinx::RealTime.callback_for(:studio)
has_many :films, :dependent => :destroy
has_many :clips, :through => :films
end
class Film < ActiveRecord::Base
after_save ThinkingSphinx::RealTime.callback_for(:film)
belongs_to :studio
has_many :clips, :dependent => :destroy
has_many :film_countries
has_many :countries, :through => :film_countries, :source => :fcountry
end
class Clip < ActiveRecord::Base
after_save ThinkingSphinx::RealTime.callback_for(:clip)
is_impressionable :counter_cache => true, :unique => :request_hash
the impressionist gem is tracking all of the views for us. And what do u want to render ?
a list of results, between the two dates of usofe rwhat of users who viewed the clip u selected
belongs_to :film
has_one :video, :dependent => :destroy
has_many :playlist_item
end
sort_saas_admin_studio_film_clips POST /admin/content/studios/:studio_id/films/:film_id/clips/sort(.:format) saas_admin/clips#sort
saas_admin_studio_film_clips GET /admin/content/studios/:studio_id/films/:film_id/clips(.:format) saas_admin/clips#index
POST /admin/content/studios/:studio_id/films/:film_id/clips(.:format) saas_admin/clips#create
new_saas_admin_studio_film_clip GET /admin/content/studios/:studio_id/films/:film_id/clips/new(.:format) saas_admin/clips#new
edit_saas_admin_studio_film_clip GET /admin/content/studios/:studio_id/films/:film_id/clips/:id/edit(.:format) saas_admin/clips#edit
saas_admin_studio_film_clip GET /admin/content/studios/:studio_id/films/:film_id/clips/:id(.:format) saas_admin/clips#show
PATCH /admin/content/studios/:studio_id/films/:film_id/clips/:id(.:format) saas_admin/clips#update
PUT /admin/content/studios/:studio_id/films/:film_id/clips/:id(.:format) saas_admin/clips#update
DELETE /admin/content/studios/:studio_id/films/:film_id/clips/:id(.:format) saas_admin/clips#destroy
saas_admin_studio_films GET /admin/content/studios/:studio_id/films(.:format) saas_admin/films#index
POST /admin/content/studios/:studio_id/films(.:format) saas_admin/films#create
new_saas_admin_studio_film GET /admin/content/studios/:studio_id/films/new(.:format) saas_admin/films#new
edit_saas_admin_studio_film GET /admin/content/studios/:studio_id/films/:id/edit(.:format) saas_admin/films#edit
saas_admin_studio_film GET /admin/content/studios/:studio_id/films/:id(.:format) saas_admin/films#show
PATCH /admin/content/studios/:studio_id/films/:id(.:format) saas_admin/films#update
PUT /admin/content/studios/:studio_id/films/:id(.:format) saas_admin/films#update
DELETE /admin/content/studios/:studio_id/films/:id(.:format) saas_admin/films#destroy
saas_admin_studios GET /admin/content/studios(.:format) saas_admin/studios#index
POST /admin/content/studios(.:format) saas_admin/studios#create
new_saas_admin_studio GET /admin/content/studios/new(.:format) saas_admin/studios#new
edit_saas_admin_studio GET /admin/content/studios/:id/edit(.:format) saas_admin/studios#edit
saas_admin_studio GET /admin/content/studios/:id(.:format) saas_admin/studios#show
PATCH /admin/content/studios/:id(.:format) saas_admin/studios#update
PUT /admin/content/studios/:id(.:format) saas_admin/studios#update
DELETE /admin/content/studios/:id(.:format) saas_admin/studios#destroy
<%= link_to @clip.film.name, saas_admin_studio_film_path(@clip.film.studio, @clip.film) %>
<%= link_to @clip.name, saas_admin_studio_film_clips_path(@clip.film.studio ,@clip.film) %>