Ruby: 2.4.0
Rails: 5.1.2
嘿伙计们, 我不是Rails的新手,但绝对不是专家。
我要做的是创建一个带有嵌套属性的邪恶向导。
我已经通过Google,GitHub和StackOverflow进行了搜索,但除了this和that之外没有找到任何内容。
两者都不起作用。
我所拥有的是以下内容:
-_-_-_-_-_-_-_-_-_-_-_-_编辑!!! -_-_-_-_-_- _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ < / em>
问题是,我没有定义创建动作-.-' 我不得不修改一些变量名。在我看来,轨道有时会混淆多元化。幸运的是终于能够做到这个超级简单的东西:D
user.rb(来自设计宝石)
class User < ApplicationRecord
has_one :accountinfo
accepts_nested_attributes_for :accountinfo, update_only: true
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates_presence_of :password, :email, :accounttype
end
我希望存储用户信息的模型不会使我的用户表超载(一切都很好)
class AccountInformation < ApplicationRecord
belongs_to :user
end
我曾经使用过几次恶人而且它总是有效但只有当我将所有信息存储在用户模型中时......由于更好的结构和东西,我不想这样做。
class UsersController < ApplicationController
def index
redirect_to root_path
end
def create
@user = User.create( user_params )
end
def show
@user = User.find(params[:id])
if user_signed_in?
render 'show'
else
redirect_to root_path
end
end
private
def user_params
params.require(:user).permit(:first_name, :accounttype, :accountinfo, accountinfos_attributes:[:user_id, :competence])
end
end
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :welcome
before_action :authenticate_user!
def show
@user = current_user
render_wizard
end
def create
@accountinfo = @user.accountinfo.create(user_params)
end
def update
@user = current_user
@user.update(user_params)
render_wizard @user
end
private
def user_params
params.require(:user).permit(:accountinfo,accountinfo_attributes:[:id, :competence])
end
private
def redirect_to_finish_wizard_path
redirect_to root_path, notice: "Danke für deine Zeit!"
end
end
private
def user_params
params.require(:user).permit(:accounttype,
account_information_attributes:[:id, :competence])
end
private
def redirect_to_finish_wizard_path
redirect_to root_path, notice: "Danke für deine Zeit!"
end
end
welcome.html.erb
<%= form_for @user, url: wizard_path do |f| %>
<%= f.fields_for(:accountinfo) do |builder| %>
<div class="m-wizard__choose2 m-wizard__choose2--border-right">
<label>
<%= builder.radio_button :competence, 1, class: "input-hidden" %>
<i class="icon-people-male h1"></i>
<p class="h6 m-text--bold">Designer</p>
</label>
</div>
<div class="m-wizard__choose2">
<label>
<%= builder.radio_button :competence, 2, class: "input-hidden" %>
<i class="icon-people h1"></i>
<p class="h6 m-text--bold">Texter</p>
</label>
</div>
<% end %>
<div class="m-text--center">
<%= f.submit "Weiter", class: "m-button" %>
</div>
<% end %>
也许你已经发现了一些东西......
我希望我的用户在注册后访问welcome.html.erb。
设计运行良好,重定向到邪恶的控制器。 wicked一如既往地正常工作,路由也正确设置但这次我希望将“能力”的信息存储到account_information的相关表中。
按下“Weiter”(德语中的“continue”)按钮后,没有任何反应,但网站会重新渲染。这是我的控制台输出的内容:
UserStepsController处理#news更新为HTML参数: { “UTF8”=&gt; “中✓”, “authenticity_token”=&gt; “中uYRJyCeBGyyDcWUtIj62fmT9oMpTnUQ3p + CSi3n8tSKKLguB1j / CPZaeuZCcmpCoBjJDKY6yz7 / Z2wXfAO7YBg ==”, “用户”=&GT; { “account_information_attributes”=&GT; { “能力”=&gt; “中1”}}, “commit”=&gt;“Weiter”,“id”=&gt;“welcome”}用户加载(0.3ms)SELECT “users”。* FROM“users”WHERE“users”。“id”=?订购“用户”。“id” ASC限制? [[“id”,12],[“LIMIT”,1]](0.0ms)开始交易 AccountInformation加载(0.1ms)SELECT“account_informations”。* FROM “account_informations”WHERE“account_informations”。“user_id”=? 限制? [[“user_id”,12],[“LIMIT”,1]](0.1ms)回滚 事务(0.0ms)开始事务(0.0ms)回滚 交易
答案 0 :(得分:0)
据Wicket医生说:
class AfterSignupController < ApplicationController
include Wicked::Wizard
steps :confirm_password, :confirm_profile, :find_friends
def show
@user = current_user
case step
when :find_friends
@friends = @user.find_friends
end
render_wizard
end
end
您的控制器中应该有case step
,我在您当前的代码中看不到。
看起来像是重定向问题
答案 1 :(得分:0)
我找到了解决方案。问题是缺少创建动作和其他一些东西。我编辑了帖子,所以你可以阅读ist