FriendlyID, похоже, не находит запись базы данных с соответствующим слизью.FriendlyID не находит запись с соответствующим слипом
Вот что консоль показывает:
Started GET "/ бюджеты/напитки" для 127.0.0.1 в 2015-07-01 12:42:53 +0200 обработки на BudgetsController # показать как HTML Параметры: {«id» => «drinks»} Бюджетная нагрузка (0.2ms) SELECT «бюджеты». * FROM «бюджеты» ГДЕ «бюджеты». «Slug» = «напитки» ORDER BY «бюджеты». «Id» ASC LIMIT 1 User Load (0.2ms) SELECT «users». * FROM «users» WHERE «users». «Id» = 1 ORDER BY «users». «Id» ASC LIMIT 1 MoneyTransaction Нагрузка (0.5ms) SELECT "money_transactions". * FROM "money_transactions" ГДЕ "money_transactions" транзакций "." budget_id "=? [["budget_id", 17]]
Бюджетная нагрузка (0,1 мс) ВЫБЕРИТЕ «бюджеты». * FROM «бюджеты» WHERE «бюджеты». «user_id» =? [["user_id", 1]] Представлено budgets/_budget_overview.html.erb (5.5ms) Представлено budgets/_form.html.erb (7.0ms) Изображенные бюджеты/show.html.erb в пределах макеты/приложение (26.3 мс) Завершенный 200 OK в 224ms (Просмотров: 213.5ms | ActiveRecord: 1.0ms)Начато POST "/ money_transactions" для 127.0.0.1 в 2015-07-01 12:43:06 +0200 Обработка по MoneyTransactionsController #create в HTML Параметры: { "utf8" => "✓", "authenticity_token" => "EPcX4adigoTRY6A1doxWpdMM9eXy/KyqY84zKp855bE =", " money_transaction" => { "budget_id" => "напитки", "количество" = > "24", "title" => "coke"}, "button" => ""} Пользовательская нагрузка (0.2ms) SELECT «users». * FROM «users» WHERE «users». «id» = 1 ORDER BY «users». «id» ASC LIMIT 1 Бюджетная нагрузка (0.2ms) SELECT «бюджеты». * FROM «бюджеты» WHERE «бюджеты». «Slug» = «напитки» ORDER BY «бюджеты». «Id» ASC LIMIT 1
(0.1ms) начать транзакцию Бюджетная нагрузка (0.1ms) SELECT «бюджеты». * ОТ «бюджеты» ГДЕ «бюджеты». «id» =? ПРЕДЕЛ 1 [[ "Идентификатор", 0]]
(0,1 мс) откат транзакции (0.0ms) начать транзакцию (0,1 мс) откат транзакции Перенаправлено с http://localhost:3000/budgets/drinks завершенного 302 найдено в 14ms (ActiveRecord: 0.7ms)
Это показывает, что пул существует и правильно связан с идентификатором, когда я обращаюсь к странице. Однако после того, как ищет для записи с улиток «напитков» он возвращает только идентификатор 0.
Бюджет нагрузки (0,2 мс) ВЫБРАТЬ «бюджет». * FROM «бюджетов», где «бюджеты».» slug "=« напитки »ORDER BY« бюджеты ».« id »ASC LIMIT 1
(0.1ms) начать транзакцию Бюджетная нагрузка (0,1 мс) SELECT« бюджеты ». * ОТ« бюджеты »ГДЕ« бюджеты ». id знак равно LIMIT 1 [[ "ID", 0]]
money_transaction_controller.rb бюджет
def create
@budget = Budget.friendly.find(params[:money_transaction][:budget_id])
@money_transaction = MoneyTransaction.new(money_transaction_params)
@money_transaction.user = current_user
@money_transaction.date = Time.now.to_date
@money_transaction.is_positive = 0
@money_transaction.save
respond_to do |format|
if @money_transaction.save
format.html { redirect_to @budget, notice: 'Transaction added.'}
format.json { render :show, status: :created, location: @budget }
else
format.html { redirect_to @budget, alert: 'Transaction was not valid.'}
format.json { render json: @money_transaction.errors, status: :unprocessable_entity }
end
end
end
.Р.Б.
class Budget < ActiveRecord::Base
belongs_to :user
has_many :money_transactions
validates :amount, presence: true
validates :title, presence: true
validates :user, presence: true
validates :amount, numericality: true
extend FriendlyId
friendly_id :title, use: :slugged
def should_generate_new_friendly_id?
new_record?
end
end
бюджеты/show.html.erb
<%= form_for(@budget.money_transactions.build, :html => { :id => 'money_transaction-form' }) do |f| %>
<%= f.hidden_field :budget_id, :value => params[:id] %>
<%= f.number_field :amount, id: "transaction-input", placeholder: "#{@budget.title} ", step: 0.01, :autocomplete => :off %>
<%= f.text_field :title, class: "", placeholder: "purpose", :autocomplete => :off %>
<%= f.button(type: 'submit', class: "postfix") do %>
<i class="fa fa-arrow-right"></i>
<% end %>
<% end %>
routes.rb
get '/pages', to: 'pages#index'
devise_for :users
resources :users
resources :budget
resources :money_transactions
root :to => 'budgets#index'
Позвольте мне знать, если вам нужны любые другие файлы. Раньше я работал с friendlyID и никогда не испытывал проблем. Я надеюсь, что вы можете мне помочь.
EDIT: Так что я нашел обходное решение. Но я чувствую, что должно быть более простое решение. Я сменил свое скрытое поле на:
<%= f.hidden_field :budget_id, :value => Budget.where(:slug => params[:id]).last.id %>
Теперь он работает. Но если у вас есть лучшее решение, пожалуйста, дайте мне знать.
У вас есть атрибуты называемых пробковой в вашу соответствующую модель, которая в настоящее время используется расширение на дружественно ID, пожалуйста, попробуйте запрос в рельсах консоль, может помочь вам решить проблемы. –
Спасибо за быстрый ответ. Я проверил в консоли Rails, и я могу найти модель с ее пулей: > Budget.where (: slug => "drinks") Бюджетная нагрузка (4.0ms) ВЫБЕРИТЕ «бюджеты». * FROM «бюджеты» WHERE «бюджеты». «Slug» = «drinks» => #, refresh_rate: nil, created_at: "2015-06-30 12:22:34", updated_at: "2015-06-30 12:22:34", user_id: 1, slug: "drinks">]> –
sam
параметры должны входить в slug не в id. –