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