現在,Rails5でアプリケーションを作っています。
実装したいことは,
「あるプロジェクトに対して,ユーザーが応募フォームで応募をする」ということです。
Project: プロジェクト
Apply: 応募
User: ユーザー
現在,projects/1/applies/new
というURLでフォームに入力し,登録をすると
ActiveRecord::RecordInvalid
エラーが発生し、project_id
が空になっているようです。
この場合どうしたら,project_id
を持たせることができるのでしょうか。
例えば「ユーザーが商品を注文する」「ユーザーが投稿にコメントする」といったようなイメージで実装したいです。
しかし,一般的にコメント機能などは投稿のshowアクション
でできるようにしてるそうで,コメント用のviewとcontrollerはないようです。
今回applyのviewとcontrollerはprojectと別で実装したいです。
(project_controller内ではなく,applies_controllerを使って実装したい)
以下ソースコードです。
schema.rb
create_table "applies", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.string "content" t.bigint "user_id" t.bigint "project_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["project_id"], name: "index_applies_on_project_id" t.index ["user_id"], name: "index_applies_on_user_id" end
applies_controller.rb
def create @apply = current_user.applies.build(apply_params) if @apply.save! redirect_to @apply else render action: :new end end private def apply_params params.require(:apply).permit(:content, :user_id, :project_id) end
model.rb
class Project < ApplicationRecord has_many :applies, dependent: :destroy end class Apply < ApplicationRecord belongs_to :user belongs_to :project end class User < ApplicationRecord has_many :applies end
applies/new.html.haml
= form_for [@project, @apply] , url: project_applies_path do |f| = f.label :content, "内容" = f.text_field :content, autofocus: true, autocomplete: "off" = f.submit "登録"
routes.rb
Rails.application.routes.draw do resources :projects do resources :applies end end
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/14 03:51