ruby-on-rails - 在控制器中使用局部变量作为参数
问题描述
我遇到了麻烦。我在这里连接了三个模型:用户、列表和假名。本质上,用户可以上传要出售的书籍,但他们也可以创建假名,以防他们想以不同的名称列出书籍。
这在列表显示页面上效果很好。我在控制器中使用它。
@pseudo = Pseudonym.find(@listing.pseudo_id)
然后在显示页面上我只是<%= @pseudo.name %>
用来显示假名。
这是两个动作的控制器。
def index
@pseudo = Pseudonym.find_by(params[:pseudo_id])
@listings = Listing.all.order
end
def show
@pseudo = Pseudonym.find(@listing.pseudo_id)
end
对于上下文,我的假名表只存储名称、id 和创建它的用户 id。
create_table "pseudonyms", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
t.index ["user_id"], name: "index_pseudonyms_on_user_id"
end
当用户创建新列表时,他们会从所有假名的下拉列表中选择假名。
新的列表形式
<%= f.collection_select(:pseudo_id, current_user.pseudonyms, :id, :name, prompt: 'Select a pseudonym if you want to use one. Ignore this to use your real name.') %>
我的问题是当我需要在任何索引页面上显示假名时。当我遍历所有列表时,我不再可以访问@listing.pseudo_id
.
<% @listings.each do |listing| %>
<li>
<%= link_to listing do %>
<%= image_tag listing.image.url(:thumb), title: listing.title %>
<% end %>
<div class="listing_overview">
<h2><%= link_to truncate(listing.title, length: 24, separator: ' '), listing_path(listing) %></h2>
<div id="stars">
<div class="star-rating" data-score=<%= listing.avg_rating %> style="max-width: 10%; margin-0;"></div>
</div>
<%= image_tag(listing.user.image.url, title: listing.user.username) %>
<% if listing.pseudo_id? %>
<%= link_to @pseudo.name, user_path(listing.user) %></p>
<% else %>
<%= link_to listing.user.name, user_path(listing.user) %></p>
<% end %>
<b><%= number_to_currency(listing.price) %></b>
</div>
</li>
<% end %>
但是,它可以在索引页面上显示错误的假名。如果一个用户在数据库中只有一个化名,那很好。但是任何拥有多个用户的用户,都会显示他们创建的第一个用户。它不是通过 id 找到假名,它需要来自listing.pseudo_id
.
我究竟做错了什么?
解决方案
如果用户可以定义多个假名,请尝试检查列表是否有任何假名:
listing.pseudonyms.any?
如果是这样,遍历它们
listing.pseudonyms.each {|pseudonym| ... }
推荐阅读
- javascript - 如何在 shopify 中创建 BMI 计算器?
- c - 与阻塞 select() 一起使用时,非阻塞套接字真的是非阻塞的吗?
- python - pandas argmax 返回一个意外的值
- javascript - Node.js 生成子进程 stderr 不起作用
- node.js - 我的 js express 路由器有一个大问题
- linux - xkk符号重新映射在终端中不起作用
- python - 将 api 响应附加到 .txt 文件中而不重复
- javascript - 如何解析 txt 文件,然后通过多部分发送?
- javascript - 我想用js选择选项吗?
- java - Spring Boot - @ModelAttribute 如何知道映射值的位置?