我正在尝试将它/ cards /:id呈现为另一个参数 - multiverse_id是我的数据库中的名称。
所以我尝试替换
def show
# @card = Card.where(multiverse_id: params[:multiverse_id])
@card = Card.find(params[:id])
end
但是,在使用它时,@ card的每次引用都会失败(我有点期待)。
我不太熟悉如何修改路由以修改它以使用:multiverse_id代替。
如果multiverse_id不存在(我有~2,000),我还需要一个回退使用ID。
def show
if Card.where(multiverse_id: params[:multiverse_id]).nil?
@card = Card.find(params[:id])
else
@card = Card.where(multiverse_id: params[:multiverse_id])
end
# @card = Card.find(params[:id])
end
我尝试了这个逻辑,但我得到了同样的错误。我不确定这个逻辑是否有效,因为路由会查找cards /:id
欢迎任何输入
更新
我尝试了Permalink的建议,但它似乎没有任何效果 - 我检查的每种类型的ActiveDirectory只是查找:id,无论如何。
我确实采纳了使用
的建议 def show
if Card.where(multiverse_id: params[:multiverse_id]).nil?
@card = Card.find(params[:id])
else
@card = Card.find_by(multiverse_id: params[:multiverse_id])
end
# @card = Card.find(params[:id])
end
但它仍然每次都返回:id - 我确实注意到ActiveDirectory正在查询multiverse_id
,但它运行
Card Load (0.4ms) SELECT "cards".* FROM "cards" WHERE "cards"."id" = ? LIMIT ? [["id", 15634], ["LIMIT", 1]]
Card Load (2.0ms) SELECT "cards".* FROM "cards" WHERE "cards"."multiverse_id" IS NULL LIMIT ? [["LIMIT", 1]]
这不是我真正需要的。我应该改变逻辑吗?
再次更新
def show
@card = Card.find_by_multiverse_id(params[:multiverse_id]) if params[:multiverse_id]
@card = Card.find(params[:id]) unless @card.present?
# @card = Card.find(params[:id])
end
但不是:id总是会在路线上传递?
但是在仔细考虑之后我需要以不同的方式提出问题。
我的关注
有些卡片没有我提到的Multiverse_IDs,所以我想让它们回滚到:id。但是,目前我的一些ID等于多元ID - 这会导致问题。是否有可能重新填充我的数据库并在rake中以某种方式强制ID等于:multiverse_id如果存在,如果不存在,则成为id?
我的佣金
namespace :cards do
desc "Create cards"
task :create_cards => :environment do
cards = MTG::Card.all
cards.each do |card|
puts card.name + '-' + card.set
card.image_url.blank? ? image_url = "/assets/mtgCardBack.jpg" : image_url = card.image_url
Card.create(
...
multiverse_id: card.multiverse_id,
...
)
end
end
end
它填充了更多,但这是唯一的常数。
任何想法都将不胜感激!
答案 0 :(得分:1)
在你的控制器中试试这个:
@book = Book.find_by_multiverse_id(params[:multiverse_id]) if params[:multiverse_id]
@book = Book.find(params[:id]) unless @book.present?
答案 1 :(得分:0)
使其运作的一种方法是使用permalink
模型上的to_param
方法参数化Card
class Card < ApplicationRecord
def to_param
permalink
end
...
end
然后,在您的控制器上,使用固定链接或id:
if params[:permalink]
@book = Book.find_by_permalink(params[:permalink])
else
@book = Book.find(params[:id])
end