我需要一些帮助。Rails,链接页面
我有«竞争者»属于帖子。 (每个职位有不同的竞争者)。
我希望能够显示竞争者,当我点击某个职位。
我不知道如何链接/路由此。我希望将«帖子»作为我的索引页面,并且能够点击任何帖子并拥有相应的竞争者。 我添加了一个post_id作为参考的竞争者。但我甚至不知道这是否是正确的做法。
感谢您的帮助! PS:我不知道这是否会改变任何东西,但我试图使用ActiveAdmin作为后端和Carrierwave上传图像。
帖/ index.html.erb
<div class="container">
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">Your poll app</h1>
</div>
<% @posts.each do |post| %>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
<%= post.name %>
<br>
<%= post.id %>
<%= link_to "Contenders", post_contenders_path(post.id) %>
<img class="img-responsive" src="" alt="">
<%= image_tag post.image_url %>
</img>
</a>
</div>
<% end %>
</div>
</div>
竞争者/ index.html.erb
class ContendersController < InheritedResources::Base
def index
@contenders = Contender.all
end
def new
@contender = Contender.new
end
def create
@contender = Contender.new(post_params)
if @contender.save
redirect_to posts_path, notice: "The contender #{@contender.name} has been uploaded."
else
render "new"
end
end
def destroy
@contender = contender.find(params[:id])
@contender.destroy
redirect_to posts_path, notice: "The post #{@contender.name} has been deleted."
end
private
def post_params
params.require(:contender).permit(:name, :image)
end
private
def contender_params
params.require(:contender).permit(:name, :image, :post_id)
end
end
控制器/ contenders_controllers.rb
class ContendersController < InheritedResources::Base
def index
@contenders = Contender.all
end
def new
@contender = Contender.new
end
def create
@contender = Contender.new(post_params)
if @contender.save
redirect_to posts_path, notice: "The contender #{@contender.name} has been uploaded."
else
render "new"
end
end
def destroy
@contender = contender.find(params[:id])
@contender.destroy
redirect_to posts_path, notice: "The post #{@contender.name} has been deleted."
end
private
def post_params
params.require(:contender).permit(:name, :image)
end
private
def contender_params
params.require(:contender).permit(:name, :image, :post_id)
end
end
个
控制器/ posts_controllers.rb
class PostsController < ApplicationController
def index
@posts = Post.all
end
def new
@post = Post.new(params[:id])
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to posts_path, notice: "The post #{@post.name} has been uploaded."
else
render "new"
end
end
def destroy
@post = Post.find(params[:id])
@post.destroy
redirect_to posts_path, notice: "The post #{@post.name} has been deleted."
end
private
def post_params
params.require(:post).permit(:name, :image)
end
end
终端
发起者在2017年1月16日20时22分十六秒0000 处理GET为127.0.0.1 “/帖/ 10 /竞争者”通过ContendersController#指数为HTML 参数:{ “POST_ID”=> “10”}布局内 渲染竞争者/ index.html.erb /应用 竞争者负荷(0.5毫秒)
SELECT “竞争者” * FROM“竞争者。 “ 呈现竞争者(2.8ms) 在177ms内完成200行(查看:172.9ms | ActiveRecord的:0.5ms的)
入门使用 “/”,用于PostsController#指数HTML 在2017年1月16日20点35分三十秒+0000 处理127.0.0.1渲染帖子/布局内index.html.erb 。/应用 后装载(1.0ms的)
SELECT “上岗” * FROM “上岗” 渲染帖子/布局内index.html.erb /应用(25.3ms) 完成200 OK在322ms(浏览次数:310.8ms | ActiveRecord:1.0ms)
所以我编辑了代码。它仍然没有表现出正确的东西。
帖子/ index.html.erb
<div class="container">
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">Your poll app</h1>
</div>
<% @posts.each do |post| %>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
<%= post.name %>
<br>
<%= post.id %>
<%= link_to "Contenders", post_contenders_path(post_id: post.id) %>
<img class="img-responsive" src="" alt="">
<%= image_tag post.image_url %>
</img>
</a>
</div>
<% end %>
</div>
</div>
竞争者/ index.html的。ERB
<div class="container">
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">
Test
</h1>
</div>
<% @contenders.each do |contender| %>
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" href="#">
<%= contender.name %>
<br>
<%= contender.post_id %>
<img class="img-responsive" src="" alt="">
<%= image_tag contender.image_url %>
</img>
</a>
</div>
<% end %>
</div>
</div>
控制器/ contenders_controllers.rb
class ContendersController < InheritedResources::Base
def show
@post = Post.find_by(id: params[:post_id])
@contenders = @post.contenders
end
private
def post_params
params.require(:contender).permit(:name, :image)
end
private
def contender_params
params.require(:contender).permit(:name, :image, :post_id)
end
end
控制器/ posts_controllers.rb
class PostsController < ApplicationController
def index
@posts = Post.all
end
def show
@post = Post.find_by(id: params[:post_id])
@contenders = @post.contenders # Assuming that they have a has_many/belongs to relationship.
end
private
def post_params
params.require(:post).permit(:name, :image)
end
end
的routes.rb
Rails.application.routes.draw do
resources :contenders
resources :users
devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
resources :posts do
resources :contenders
end
root "posts#index"
end
你端子输出显示你从ContenderController#指数呈现。其中代码为'@contenders = Contender.all',所以这就是渲染所有竞争者的原因。如果你想限制它,首先用':post_id'找到'@ post',然后调用该帖子的所有竞争者。我在'show'方法下面的回答中显示了这一点。你可以在contenders_controller索引操作中做同样的事情,我会发布一个编辑。试试看。 :-) –
嗨,詹姆斯,我已经更新了代码。但是我想还是有一些东西丢失.. :( – Benjamin
终端输出仍然是相同的吗?如果它不同,你可以粘贴新的输出吗?你可以粘贴你的'rake routes'输出吗?另外,你可以尝试让路由去到显示页面,就像这个'<%= link_to post_path(post.id)%>'。你试过把@post = Post.find_by(id:params [:post_id]); contenders_controller#index'中的@contenders = @ post.contenders'代码? –