我可以轻松地在我的应用程序中执行singnin和singup过程,但我无法理解如何在我的新模型中传递user_id
。成功集成设计后,我按照以下步骤操作:
使用书名
生成新模型rails generate model books name:string users:references
它在book
文件夹中生成了models
个类以及migration
类。
class Book < ActiveRecord::Base
belongs_to :user
end
class CreateBooks < ActiveRecord::Migration
def change
create_table :books do |t|
t.string :name
t.references :user, index: true, foreign_key: true
t.timestamps null: false
end
end
现在,我添加
has_many :books, :dependent => :destroy
在user
模型类中进行正确的one to many
关联。
创建这些类后,我运行rake db:migrate
并在项目中创建了一个新模式。创建模式后,我写了seed
文件来确认我的数据库是否正常工作。它工作正常。我可以在Book
和user
表格中看到新条目以及user_id
表格中的Book
。
sampleApplicationUI::Application.routes.draw do
devise_for :users
resources :books, except: [:edit]
end
现在,我添加了一个book_controller
类,这里是代码:
class BooksController < ApplicationController
before_action :authenticate_user!
def index
@book = Book.all
end
def new
@book = Book.new
end
def create
@book = Book.new(filtered_params)
if @book.save
redirect_to action: 'index'
else
render 'new'
end
end
private
def filtered_params
params.require(:book).permit(:name, :user_id)
end
....
<%= form_for @book, as: :book, url: book_path do |f| %>
<div class="form-group">
<%= f.label :Name %>
<div class="row">
<div class="col-sm-2">
<%= f.text_field :name, class: 'form-control' %>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<%= f.submit 'Submit', class: 'btn btn-primary' %>
</div>
</div>
我关注了一些博客,他们提到要在book_controller
类中进行以下更改以访问user_id
并保存到book
表中:
def new
@book = Book.new(user: current_user)
end
但在这里我得到No variable defined current_user
:(
请告诉我这里的错误以及如何在user.user_id
课程中访问book controller
。
谢谢你的时间!
答案 0 :(得分:1)
在控制器的创建方法
中尝试此操作图书管理员课程
def create
@book = current_user.books.build(filtered_params)
if @book.save
redirect_to action: 'index'
else
render 'new'
end
end
希望这对你有用。
答案 1 :(得分:0)
在books / new.html.erb中,在&lt;%= f.submit ____%&gt;之前添加以下行:
<%= f.hidden_field :user_id, value: current_user.id %>