Я прочитал предыдущие ответы на вопросы об этой ошибке, но я не могу их адаптировать к моей текущей ситуации.ActionController :: UrlGenerationError ... missing required keys: [: id]
Я работаю через раздел I18N на Tuts + Riding Ruby on Rails курса (сравнивая свой код на то, что в course repo), так и для физических упражнений я должен был изменить локаль по умолчанию Португалия (PT), и изменить чтобы мои ресурсы Issue и Projects были добавлены в локаль (например, localhost3000/pt/issues/14
), область под номером /:locale
в файле маршрутов.
Похоже, что идентификатор ключа по какой-то причине заменен хэшем локали. Когда я отправляю новый выпуск, я получаю следующую ошибку:
ActionController::UrlGenerationError in Issues#show
Showing /Users/andrekibbe/code/new_issues/app/views/issues/show.html.erb where line #19 raised:
No route matches {:action=>"show", :controller=>"projects", :id=>nil, :locale=>#<Project id: 1, name: "First project", description: "A little description", created_at: "2015-06-20 15:34:58", updated_at: "2015-06-20 15:34:58">} missing required keys: [:id]
Что я делаю неправильно? У меня есть правильный путь?
Извлеченные источник (около линии № 19):
вопросов/show.html.erb
<p id="notice"><%= notice %></p>
<p>
<strong>Title:</strong>
<%= @issue.title %>
</p>
<p>
<strong>Description:</strong>
<%= @issue.description %>
</p>
<p>
<strong>No followers:</strong>
<%= @issue.no_followers %>
</p>
<p><b>Project: </b>
<%= link_to @issue.project.name, @issue.project %></p>
<%= link_to 'Edit', edit_issue_path(@issue) %> |
<%= link_to 'Back', issues_path %>
Вот create
действия Проблемы и проекты контроллеров:
issues_controller.rb
def create
@issue = Issue.new(issue_params)
respond_to do |format|
if @issue.save
format.html { redirect_to @issue, notice: t('issues.created') }
format.json { render :show, status: :created, location: @issue }
else
format.html { render :new }
format.json { render json: @issue.errors, status: :unprocessable_entity }
end
end
end
projects_controller.rb
def create
@project = Project.new(project_params)
respond_to do |format|
if @project.save
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render :show, status: :created, location: @project }
else
format.html { render :new }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
Метод шоу моего контроллера вопросам, попросил от @Pavan, является Rails по умолчанию. Здесь не так много.
issues_controller.rb
def show
end
Мои маршруты:
routes.rb
Rails.application.routes.draw do
scope "/:locale" do
get 'timeline/index'
resources :projects
resources :issues
end
end
рейк маршруты
timeline_index GET /:locale/timeline/index(.:format) timeline#index
projects GET /:locale/projects(.:format) projects#index
POST /:locale/projects(.:format) projects#create
new_project GET /:locale/projects/new(.:format) projects#new
edit_project GET /:locale/projects/:id/edit(.:format) projects#edit
project GET /:locale/projects/:id(.:format) projects#show
PATCH /:locale/projects/:id(.:format) projects#update
PUT /:locale/projects/:id(.:format) projects#update
DELETE /:locale/projects/:id(.:format) projects#destroy
issues GET /:locale/issues(.:format) issues#index
POST /:locale/issues(.:format) issues#create
new_issue GET /:locale/issues/new(.:format) issues#new
edit_issue GET /:locale/issues/:id/edit(.:format) issues#edit
issue GET /:locale/issues/:id(.:format) issues#show
PATCH /:locale/issues/:id(.:format) issues#update
PUT /:locale/issues/:id(.:format) issues#update
DELETE /:locale/issues/:id(.:format) issues#destroy
Я изменил пути к предложенным @nathanvda, но предложения получено следующее сообщение об ошибке внутри Rails сам рамочный код:
NoMethodError in IssuesController#index
undefined method `set_locale' for #<IssuesController:0x007fd2f9fc2460>
Extracted source (around line #432):
case filter
when Symbol
lambda { |target, _, &blk| target.send filter, &blk }
when String
l = eval "lambda { |value| #{filter} }"
lambda { |target, value| target.instance_exec(value, &l) }
Обновите свое сообщение с помощью 'show' метода вашего' issues_controller' – Pavan
@Pavan Добавлено, но, как я упоминал в редактировании, это только метод по умолчанию, пустой, за исключением того, что он наследует. – Gameboy70
Попробуйте дать это так: '<% = link_to @ issue.project.name, @ issue.project.id%>' – Pavan