【问题标题】:Rails how to attach object creation to a user session for user_idRails 如何将对象创建附加到 user_id 的用户会话
【发布时间】:2012-12-02 13:28:52
【问题描述】:

我是 Rails 新手。我正在开发一个简单的应用程序,用于创建和与朋友分享收藏。我有用户,他们有物品。这些项目属于类别,而类别又具有子类别。用户可以在物品上放置 cmets

用户拥有_许多项目,项目属于_用户

Category has_many items,Items属于category

Category has_many subcategories, Subcategories belongs_to category

item has_many cmets,cmets属于item。

我已经设法创建了一个单独的 from 来创建 cmets,并带有选择类别和子类别的选项。这会自动更新 items 表中的 category_id 和 subcategory_id:

views/item/new.html.erb

div class="field">
  <%= f.label :item_name %><br />
  <%= f.text_field :name %>
 </div>

 <div class="field">
    <%= f.label :category %><br />
    <%= f.collection_select :category_id, @categories, :id, :category_type, prompt: true %>
 </div>

  <div class="field">
    <%= f.label :subcategory %><br />
    <%= f.collection_select :subcategory_id, @subcategories, :id, :sub_type, prompt: true %>
 </div>

 <div class="field">
  <%= f.label :description %><br />
  <%= f.text_area :description, rows: 7%>
 </div>

 <div class="actions"> 
    <%= f.submit %>
 </div>
<% end %>

控制器/items_contoller.rb

类 ItemsController

   def index
    @items = Item.all

  end

  def new
    @item = Item.new
    @categories = Category.all
    @subcategories = Subcategory.all 

  end

  def edit
    @item = Item.find(params[:id])
    @categories = Category.find.all
    @subcategories = Subcategory.all 

  end

  def show
    @item = Item.find(params[:id])

     render 'show'
    end

  def create
    @item = Item.new(params[:item])

    if @item.save
      flash[:success] = "Added new item #{@item}"
      redirect_to @item
    else
      render 'new'
    end
  end

  def update
    @item = Item.find(params[:id])

    if @item.update_attributes(params[:item])
     flash[:success] = "Successfully updated item!"
    redirect_to @item 
    else
     render 'edit'
    end  
  end

  def destroy
    @item = Item.find(params[:id])
    @item.destroy
    flash[:success] = "Successfully deleted category!"
    redirect_to categories_url, notice: "deleted"
  end

end

但我在创建或编辑时将特定项目与用户关联时遇到问题。我已经为用户提供了一个工作会话管理。用户可以登录和注销。我还希望能够使用当前会话中用户的相应 user_id 更新项目表中的 user_id 列,但我不知道如何去做。如果有帮助,以下是我处理会话管理的方式

sessions_controller.rb

类 SessionsController

 def new
  end

  def create
    user = User.find_by_email(params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      sign_in user
      redirect_to user
    else
     render 'new', notice:"Invalid email/password combination" 
    end
  end

  def destroy
    sign_out
    redirect_to root_url
  end
end

sessions_helper.rb

module SessionsHelper

  def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user
  end

  def signed_in?
    !current_user.nil?
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    @current_user ||= User.find_by_remember_token(cookies[:remember_token])
  end

  def current_user?(user)
    user == current_user
  end 

  def sign_out
    self.current_user = nil
    cookies.delete(:remember_token)
  end
end

非常感谢您的预期回复

【问题讨论】:

  • 您是否在关联表中创建外键?

标签: ruby-on-rails session ruby-on-rails-3.2


【解决方案1】:
class ItemsController < ApplicationController
  def create
    @item = Item.new(params[:item])
    @item.user_id = current_user.id

    # ...
  end
end

不确定是否是您要查找的内容。

【讨论】:

  • 别忘了接受它。它将帮助您在未来获得更多回复。
猜你喜欢
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多