私はこれでいくつかの助けが必要です。レール、ページのリンク
私は投稿に属する«候補»を持っています。 (各投稿には異なる候補があります)。
特定の投稿をクリックすると、候補者を表示することができます。
私はこれをリンク/ルーティングする方法がわかりません。私はインデックスページとして«posts»を持っていて、投稿をクリックして対応する候補を持っていたいと思っています。 私は参照として競合相手に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
ターミナル
は、2017年1月16日20時22分16秒0000 処理で127.0.0.1のために、 "/ポスト/ 10 /候補を" GET開始コントローラ/ 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
{ "post_idの" => "10"}レイアウト内 レンダリング候補/ index.html.erb /アプリケーション テンダーロード(0.5ミリ秒)
SELECT "候補" *「候補FROM:HTML パラメータとしてContendersController位インデックスによって" レンダリングした候補s/index.html.erb内のレイアウト/アプリケーション(2.8ms) 177msで200 OK完了(Views:172.9ms | ActiveRecordの:0.5msの)
は、レイアウト内のHTMLレンダリング ポスト/ index.html.erbとしてPostsControllerの番号インデックスによって2017年1月16日午後8時35分30秒0000 処理で127.0.0.1のための "/" GET開始しました/アプリケーション 投稿負荷(1.0ms)
SELECTより "投稿" 投稿/ index.html.erb内のレイアウト/アプリケーション(25.3ms) 完了しました322msで200 OK(閲覧回数:310.8ms |アクティブレコード: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#indexからレンダリングしていることを示しています。これは '@contenders = Contender.all'というコードを持っています。そのため、すべての候補をレンダリングしています。スコープを設定する場合は、まず、 '@ post'を':post_id'で見つけて、その投稿のすべての候補を呼び出します。私はこれを 'show'メソッドの下の私の答えに示します。 contenders_controllerのindexアクションでも同じことができます。私は編集を投稿します。試してみてください。 :-) –
こんにちはJamesさん、コードを更新しました。しかし、まだ何かが見つからないと思っています。:( – Benjamin
端末の出力はまだ同じですか?別の場合は新しい出力をペーストできますか?あなたの 'rake routes'出力をペーストできますか?また、この<%= link_to post_path(post.id)%> 'のように表示ページに移動します。'@post = Post.find_by(id:params [:post_id]);を入れてみましたか? @ contenders = @ post.contenders'コードは 'contenders_controller#index'にありますか? –