首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FriendlyID找不到匹配的段塞条目

FriendlyID找不到匹配的段塞条目
EN

Stack Overflow用户
提问于 2015-07-01 10:55:40
回答 1查看 220关注 0票数 0

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

代码语言:javascript
复制
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

budget.rb

代码语言:javascript
复制
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

budgets/show.html.erb

代码语言:javascript
复制
<%= 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

代码语言:javascript
复制
  get '/pages', to: 'pages#index'

  devise_for :users
  resources :users

  resources :budget
  resources :money_transactions


  root :to => 'budgets#index'

如果你需要其他文件请告诉我。我以前和friendlyID合作过,从来没有遇到过问题。我希望你能帮助我。

编辑:,所以我找到了一个解决办法。但我觉得应该有更简单的解决办法。我把隐藏的字段更改为:

代码语言:javascript
复制
<%= f.hidden_field :budget_id, :value => Budget.where(:slug => params[:id]).last.id %>

现在起作用了。但如果你有更好的解决办法,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-01 15:33:15

不要对表单参数使用FriendlyID --只需使用直接的ID,这样rails就可以自动添加关联,从而获得一个更有效的SQL查询。

代码语言:javascript
复制
<%= 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 %>

这样,您就可以清理控制器:

代码语言:javascript
复制
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
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31159311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档