【问题标题】:Routes and Models issue on a Rails Join TableRails 连接表上的路由和模型问题
【发布时间】:2017-04-03 00:39:29
【问题描述】:

我正在创建一个应用程序,允许用户为我附近的地方创建自定义行程。每个地点都存储在地点表中,并与地点 ID 相关联。目前,这些地方通过路线作为连接表与用户相关联。这很好用,但我想允许用户登录并被定向到一个视图,该视图将列出他们的所有行程。为此,我需要通过一组具有标题并与 user_id 关联的用户参数来创建行程的新实例。然后,用户可以将 place_ids 添加到该行程实例。不幸的是,我无法理解应该如何在活动记录中路由。任何人都可以帮我弄清楚如何构建它,所以它会起作用,因为我尝试的一切都会返回错误:没有路由匹配 [GET] "/create_itinerary"。

行程模式

class Itinerary < ApplicationRecord
belongs_to :user
belongs_to :place

结束

行程控制器

class ItinerariesController < ApplicationController
def add_place
    # current_user
    @place = Place.find(params[:id])
    @itenerary = @place.itineraries.create(user_id: current_user.id)

    redirect_to :back
end

def index
    @itinerary_places = current_user.places
end

def show
    @itinerary_places = current_user.places
end

def new
    @itinerary_new = Itinerary.new(params[:itinerary])

    redirect_to create_itinerary_path
end

def create
    itinerary = Itinerary.new(itinerary_params)
    itinerary.user_id = session[:user_id]
    itinerary.save
end

private

def itinerary_params
    params.require(:itinerary).permit(:title)
end

    end

行程(new.html.erb)

<%= form_for @itinerary_new, url: {action: "create"}, html: {} do |f| %>

<%= f.text_field :title, placeholder: "Name Your New Itinerary" %>

<%= f.submit :class => "user_submit" %>

行程路线

get "/itinerary_new", to: "itineraries#new"
get "/itinerary_portal", to: "itineraries#index"
get "/itinerary", to: "itineraries#show"
get "/add_place/:id", to: "itineraries#add_place"
get "/delete_itinerary", to: "itineraries#destroy"
post "/create_itinerary", to: "itinerary#create"

架构

ActiveRecord::Schema.define(version: 20170402040005) do

create_table "itineraries", force: :cascade do |t|
 t.integer  "user_id"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
 t.integer  "place_id"
 t.string   "title"

 end

【问题讨论】:

    标签: mysql ruby-on-rails activerecord


    【解决方案1】:

    问题是当您访问/itinerary_new 时,它会重定向到/create_itinerary。那么http方法不匹配,因为create_itinerary只接受post,没有get

    new 操作中删除redirect_to create_itinerary_path。这句话毫无意义且错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多