Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 向当前用户添加等级库(配置文件)_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 向当前用户添加等级库(配置文件)

Ruby on rails 向当前用户添加等级库(配置文件),ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,你好,Stackoverflow程序员 我目前正在学校的项目旁边运行一个小的辅助项目,但我现在陷入了一段时间 这是我的问题:我有一个用户具有一些standerd属性,而该用户有一个:spec。spec是一个概要文件的扩展版本。 现在,正如我提到的,这个规范有一些额外的属性,但我似乎无法将其正确分配给当前用户。奇怪的是,我能够在控制台中创建规范 这是我的Spec_控制器: class SpecController < ApplicationController def index

你好,Stackoverflow程序员

我目前正在学校的项目旁边运行一个小的辅助项目,但我现在陷入了一段时间

这是我的问题:我有一个用户具有一些standerd属性,而该用户有一个:spec。spec是一个概要文件的扩展版本。 现在,正如我提到的,这个规范有一些额外的属性,但我似乎无法将其正确分配给当前用户。奇怪的是,我能够在控制台中创建规范

这是我的Spec_控制器:

class SpecController < ApplicationController
  def index
    # redirect_to :controller => "user", :action => "index"
    # @user.spec = @spec.new
  end

  def update
    @user = User.find(current_user.id)
    @spec.user_id = current_user.id
    @spec = current_user.spec(spec_params)
    @spec = Spec.find(params[:id])
      if @spec.update(params.require(:spec).permit(:first_name, :last_name, :gender, :birthdate, :occupation, :city, :state))
        flash[:notice] = "Changes saved."
        redirect_to users_path
      else
        flash[:notice] = "er ging iets mis!"
        render 'edit'
      end
  end

  def edit
    @user = User.find(session[:user_id])  
    @spec = Spec.new
  end

  def new
    @user = User.find(session[:user_id])
    @spec = Spec.new
  end

private

  def spec_params
    params.require(:spec).permit(:first_name, :last_name, :gender, :birthdate, :occupation, :city, :state)
  end

   def user_params
    params.require(:user).permit(:screen_name, :email, :password)
  end


end
我希望我的代码是可读的,仍然试图找出rails(第一种编程语言)内部的很多东西

谢谢

试试看

@spec = current_user.spec
if @spec.update(spec_params)
...
更新: 我认为更新规范的链接应该是这样的
/specs/1/edit
,获取和更新规范应该是

@spec = Spec.find(params[:id])
if @spec.update(spec_params)
...

终于成功了!我在Spec controller中创建了一个新的def,而不是更新,我创建了一个创建函数。首先有点奇怪,为什么当你想要创建一个完整的新规范时,我把它作为一个更新函数


非常感谢您的帮助:)非常感谢。

为什么您在indix中的index user.spec=spec.new中使用了下面的代码重定向方法,为什么您在uodate方法中没有使用spec_params方法,还有当您有当前_用户时,为什么您要查找具有会话id的用户。请更新您的代码。您还可以检查更新方法中的参数,如果您得到任何错误粘贴,感谢您的快速响应Arv,我在规范控制器中添加了一些更改。index方法中的redirect和spec.new确实是一个错误,可能是一个复制错误。但我仍然没有取得任何进展,奇怪的是,当我在更新方法中添加(比如)puts“something”来查看我的服务器日志是否有任何特殊功能时,我甚至没有在日志中找到puts,它甚至没有找到整个更新方法,要求人们调试与您实际运行的代码不同的代码是毫无意义的。在任何情况下,表单都可能会提交到创建操作,而不是更新操作。是的,但我仍然想尝试一下,目前在我的表单中,我在“提交”按钮下有:“因此,我假设它使用了正确的定义。感谢您的回复Johnny,我尝试过,但仍然没有任何进展:(如果我没有收到任何错误消息,请发布错误消息,只要是我在def更新中指定的渲染表单。@Johnny Dương,再次感谢您的回复,我感觉我们已经到了!我想错误现在出现在我的routes文件中(这是一个很大的混乱,所以您不必尝试在那里找到错误哈哈)刚刚收到错误“No route matches[POST]”/spec/33/edit“,所以你对更新规范链接的看法是正确的(/specs/1/edit。我在上面上传了我的路由文件。
/spec/33/edit
用于显示表单,表单应该使用
POST
方法提交到
spec/33
,我认为你应该尝试稍微改变一下你的视图(使用(@spec)表格)
<%= form_for :spec do |form| %>
<fieldset>
    <legend><%= @title %></legend>
    <%= text_field_tag form, "first_name" %>
    <%= text_field_tag form, "last_name" %>
    <div class="form_row">
        <label for="gender">Gender:</label><br>
        <%= radio_button :spec, :gender, "Male"  %> Male
        <%= radio_button :spec, :gender, "Female" %> Female
    </div>
    <div class="form_row">
        <label for="birthdate">Birthdate:</label><br>
    <%= date_select :spec, :birthdate, :start_year => Spec::START_YEAR, :end_year => Time.now.year, :include_blank => true, :order => [:month, :day, :year] %>
    </div>
    <%= text_field_tag form, "occupation" %>
    <%= text_field_tag form, "city" %>
    <%= text_field_tag form, "state" %>
    </br>
    <%= submit_tag "Update", :class => "submit", :controller => :spec, :action => :update %>
</fieldset>
<% end %>
Rails.application.routes.draw do

  resources 'spec'
  #post ':controller(/:spec(/:id(.:edit)))'

  get 'spec/index'

  get 'spec/edit'

  get 'profile/index'

  get 'profile/show'

  get 'profile/:screen_name', controller: 'profile', action: 'show'

 resources :users, only: [:index, :new, :create, :login, :destroy, :edit, :show, :update]

controller :sessions do
     get :login, to: 'sessions#new'
     delete :logout, to: 'sessions#destroy'
     post :authenticate, to: 'sessions#create'

end

    root 'site#index'

    get 'site/index'

    get 'site/about'

    get 'site/help'

  end
@spec = current_user.spec
if @spec.update(spec_params)
...
@spec = Spec.find(params[:id])
if @spec.update(spec_params)
...