Мне нужна помощь в этом.Рельсы, ссылки на страницы
У меня есть «соперники», которые относятся к сообщениям. (у каждого поста есть разные соперники).
Я хотел был бы иметь возможность отображать соперников, когда я нажимаю на определенное сообщение.
Я не знаю, как связать маршрут. Я хотел бы иметь «сообщения» в качестве моей индексной страницы и иметь возможность нажимать на любую запись и иметь соответствующих соперников. Я добавил post_id к претендентам в качестве ссылки. Но я даже не знаю, правильно ли это делать.
Спасибо за помощь!
PS: Я не знаю, что это ничего не меняет, но я пытаюсь использовать ActiveAdmin в качестве backend и 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
Терминал
Started GET "/ сообщений/10/соперников" для 127.0.0.1 в 2017-01-16 20:22:16 +0000 Processing по ContendersController # индексу, как HTML- Параметры: { "post_id" => "10"} Оказание претендентов/index.html.erb в пределах макетов/приложения Претендент нагрузки (0,5 мс)
SELECT "соперники" * от «соперников. " Полученный соперник s/index.html.erb в макетах/приложении (2,8 мс) Завершено 200 OK в 177 мс (Просмотров: 172.9мс | ActiveRecord: 0.5мс)
Started GET "/" для 127.0.0.1 в 2017-01-16 20:35:30 +0000 Обработка по PostsController # индекс как HTML Rendering сообщения/index.html.erb внутри макетов/application Post Load (1.0ms)
SELECT "posts". * FROM "posts" Представленные сообщения/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.Еврорадио
<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' с': post_id', а затем вызовите всех претендентов на этот пост. Я показываю это в моем ответе ниже в методе 'show'. Вы можете сделать то же самое в действии индекса contenders_controller, и я опубликую редактирование. Попробуйте. :-) –
Привет, Джеймс, я обновил код. Но я думаю, что все еще что-то не хватает .. :( – Benjamin
Является ли вывод терминала по-прежнему одним и тем же? Можете ли вы вставить новый вывод, если он отличается? Можете ли вы вставить выходные данные 'rake routes '? Также вы можете попробовать сделать маршрут на страницу показа. Подобно этому '<% = link_to post_path (post.id)%>'.Попробовали ли вы поставить @post = Post.find_by (id: params [: post_id]); @contenders = @ post.contenders' в индексе 'contenders_controller #? –