FriendlyID似乎找不到带有相应段塞的数据库条目。
下面是控制台显示的内容:
在2015-07-01 12:42:53 +0200的BudgetsController#show作为HTML参数:{“id”“=>”饮料“”}预算加载(0.2ms)从“预算”的“预算”选择“预算”.*。“段塞”=‘饮料’顺序按“预算”。“id”“用户”。“id”=“用户”的顺序。“id”ASC限制1 MoneyTransaction加载(0.5ms)从"money_transactions“中选择"money_transactions".*,其中”money_transactions“。”budget_id“=?["budget_id",17] 预算负荷(0.1ms)从“预算”中选择“预算”.*。“user_id”=?["user_id",1]呈现的预算/_预算员_overview.html.erb (5.5ms)呈现预算/_form.html.erb (7.0ms)呈现在布局/应用程序(26.3ms)内的预算/show.html.erb(26.3ms)在224 OK中完成了200 OK(查看: 213.5ms、用ActiveRecord: 1.0ms) 在2015-07-01 12:43:06 +0200中开始发布127.0.0.1的"/money_transactions“作为HTML参数:{"utf8"=>"✓”、“money_transaction”=>{“budget_id”=>“饮料”、“coke”=>“24”、“标题”“=>”coke“},“=>”}用户加载(0.2ms)从“用户”的“用户”中选择“用户”.*。“id”=1按“用户”排序。“id”ASC限制1预算加载(0.2ms)从“预算”的“预算”中选择“预算”.*。 (0.1ms)开始事务预算负载(0.1ms)从“预算”中选择“预算”.*。“id”=?限制1 ["id", 0]回滚事务(0.0ms)开始事务(0.1ms)回滚事务重定向到http://localhost:3000/budgets/drinks已完成的事务在14 in (ActiveRecord: 0.7ms)
这表明当我访问页面时,弹格是存在的,并且正确地与ID相关。但是,在寻找一个带有子弹“饮料”的条目之后,它只返回ID为0。
预算负荷(0.2ms)从“预算”(预算)中选择“预算”(.*)。“段塞”=“饮料”按“预算”排序。 (0.1ms)开始事务预算负载(0.1ms)从“预算”中选择“预算”.*。“id”=?限制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
endbudget.rb
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
endbudgets/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合作过,从来没有遇到过问题。我希望你能帮助我。
编辑:,所以我找到了一个解决办法。但我觉得应该有更简单的解决办法。我把隐藏的字段更改为:
<%= f.hidden_field :budget_id, :value => Budget.where(:slug => params[:id]).last.id %>现在起作用了。但如果你有更好的解决办法,请告诉我。
发布于 2015-07-01 15:33:15
不要对表单参数使用FriendlyID --只需使用直接的ID,这样rails就可以自动添加关联,从而获得一个更有效的SQL查询。
<%= form_for(@budget.money_transactions.build, :html => { :id => 'money_transaction-form' }) do |f| %>
<%= f.hidden_field :budget_id, value: @budget.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 %>这样,您就可以清理控制器:
def create
@money_transaction = MoneyTransaction.new(money_transaction_params) do |mt|
mt.user = current_user
mt.date = Time.now.to_date
mt.is_positive = 0
end
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
endhttps://stackoverflow.com/questions/31159311
复制相似问题