编辑页面以显示所有类别名称,每个类别名称上都有编辑输入 [英] Edit page to display all category names with edit inputs on each

查看:83
本文介绍了编辑页面以显示所有类别名称,每个类别名称上都有编辑输入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的类别嵌套在指南中。我正在构建一个应用程序,以更好地学习Rails,并且正在尝试制作一个页面,该页面将显示属于指南的所有类别,并在其下具有编辑输入,并在其旁边有一个保存按钮,以便用户可以编辑他们想要更改的类别。



对于完成操作的确切方式有所了解。



这是category_item_keys控制器

  def编辑
@guide = Guide.friendly.find(params [:guide_id])
@category = Category.friendly.find(params [:category_id])
@key = @ category.category_item_keys
结束

def更新

@guide = Guide.friendly.find(params [:guide_id])
@category = Category.friendly.find(params [:category_id])
@key = @ category.category_item_keys.friendly.find( key_params)#不知道如何使它相等,因为如果@key = @ category.category.itegory_item_keys.update_attributes(key_params)$ b,则不是在页面上编辑的一组键


$ b flash [:success] =密钥已更新
redirect_to @guide
否则
渲染编辑
结束

结束

私人

def key_params
params.require(:category_item_key).permit(:key,:slug)
结束

路线

  match'/ guides /:guide_id /:category_id / keys / edit' => ‘category_item_keys#edit’,:via => :get 
match’/ guides /:guide_id /:category_id / keys /’=> ‘category_item_keys#update’,:via => :post,as::category_item_keys_update

edit.html.erb

 < ul> 
<%@ key.each do | key | %>

< li =%= key.key#只是显示键名%>< br>
<%= form_for([@ category,@keys],url:category_item_keys_create_path)做| f | %>
<%=呈现 shared / error_messages,对象:f.object%>

<%= f.label:key,键名%>
<%= f.text_field:key%>

<%= f。提交保存%>
<%end%>
< / li>


<%end%>
< / ul>

这只是给我一个错误:

 #< CategoryItemKey :: ActiveRecord_Associations_CollectionProxy:0x007fe20a86b480>的未定义方法 to_key 

稍后我计划使用就地编辑器gem,但我想学习如何使用



编辑:



修正了错误(已更改 form_for([[@ category,@keys] form_for([@ category,key] ,结果证明这种方式可用于显示和



我在提交表单
undefined method时遇到另一个错误update_attribute'



EDIT 2
慢慢到达。我将update @key变量更改为 @key = @ category.category_item_keys.all 来修复该错误,但是此行现在给我带来了问题



if @key = @ category.category_item_keys.update_attributes(key_params)'



第三次编辑



错误

 找不到没有ID $ b的CategoryItemKey $ b  

在线

  @key = @ category.category_item_keys.find params [:id] 

参数:

  { utf8 =>✓, _method => patch, authenticity_token =>> egj / OebdSbxxaoaTkr46WVIOIIu4Ezijzu45kqxLT0krjFWHqi67SRJDSgV7bcL_S $ go_b_L_Cy_b = L_S $ Cy_b = L_S $ Cy_b = L_S_Center = $ C_B_L_S_Y = $ C_B_L_S_Y == B  name => def1111},
commit => Save,
guide_id => dbz,
category_id =>个字符}


解决方案

以下是清理代码的方法:

 #config / routes.rb 
资源:指南执行
资源:类别,路径:做
资源:category_item_keys,路径:键,仅:[:update]做
得到:edit,on::collection#-> url.com/guides/:guide_id/:category_id/keys/edit
结束
结束
结束

#app / controllers / keys_controller.rb
KeysController类< ApplicationController
def编辑
@guide = Guide.find params [:guide_id]
@category = Category.find params [:category_id]
@keys = @ category.category_item_keys
结束

def更新
@guide = Guide.find params [:guide_id]
@category = Category.find params [:category_id]
@key = @ category.category_item_keys.find params [:id]

如果@ key.update key_params
redirect_to @guide,成功:键已更新
否则
render'编辑'
结束
结束

私人

def key_params
params.require(:category_item_key).permit(:key)
结束
结束

#app / views / keys / edit.html.erb
<%@ keys.each | key | %>
<%= form_for [@guide,@category,key]做| f | %>
<%= f.text_field:key%>
<%= f.submit%>
<%end%>
<%end%>






如果您想使用就地编辑器,我建议您查看


I have categories nested inside of guides. I'm building an app to learn rails better and I'm trying to make a page that will display all categories that belong to a guide and have edit inputs under them and a save button next to it so the user can edit the names of the categories they want to change.

Bit stuck on how exactly how get this done.

here is the category_item_keys controller

def edit
 @guide = Guide.friendly.find(params[:guide_id])
 @category = Category.friendly.find(params[:category_id])
 @key = @category.category_item_keys
end

def update

 @guide = Guide.friendly.find(params[:guide_id])
 @category = Category.friendly.find(params[:category_id])
 @key = @category.category_item_keys.friendly.find(key_params) # no idea what to make this equal because it isn't one set key being edited on the page


 if @key =  @category.category_item_keys.update_attributes(key_params)
  flash[:success] = "Key updated"
  redirect_to @guide
 else
  render 'edit'
 end

end

private

def key_params
params.require(:category_item_key).permit(:key, :slug)
end

routes

match '/guides/:guide_id/:category_id/keys/edit' => 'category_item_keys#edit', :via => :get
match '/guides/:guide_id/:category_id/keys/' => 'category_item_keys#update', :via => :post, as: :category_item_keys_update

edit.html.erb

  <ul>
<% @key.each do |key| %>

  <li><%= key.key #just shows key name %><br>
    <%= form_for([@category, @keys], url: category_item_keys_create_path) do |f| %>
       <%= render 'shared/error_messages', object: f.object %>

      <%= f.label :key, "Key name" %>
      <%= f.text_field :key %>

      <%= f.submit "Save"  %>
    <% end %>
    </li>


<% end %>
  </ul> 

This just gives me an error of:

undefined method `to_key' for #<CategoryItemKey::ActiveRecord_Associations_CollectionProxy:0x007fe20a86b480>

Later I plan on using an in-place editor gem but i would like to learn how this can be done fist.

EDIT:

Fixed the error ( changed form_for([@category, @keys] to form_for([@category, key] and turns out this way works for displaying and allowing all categories to be edited... to an extent.

I get another error when i submit a form undefined method 'update_attribute'

EDIT 2 slowly getting there. I Changed the update @key variable to @key = @category.category_item_keys.all to fix the error. But this line is now giving me problems

if @key = @category.category_item_keys.update_attributes(key_params)'

THIRD EDIT

ERROR

Couldn't find CategoryItemKey without an ID

on line

@key     = @category.category_item_keys.find params[:id] 

paramaters:

{"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"egj/OebdSbxxaoaTkr46WVIOIIu4Ezijzu45kqxLT0krjFWHqi67SRJDSgV7bcL6SeoGpUSYsrolspylCXBu9g==",
 "category_item_key"=>{"name"=>"def1111"},
 "commit"=>"Save",
 "guide_id"=>"dbz",
 "category_id"=>"characters"}

解决方案

Here's how to clean up the code:

#config/routes.rb
resources :guides do
    resources :categories, path: "" do
       resources :category_item_keys, path: "keys", only: [:update] do
          get :edit, on: :collection #-> url.com/guides/:guide_id/:category_id/keys/edit
       end
    end
end

#app/controllers/keys_controller.rb
class KeysController < ApplicationController
    def edit
        @guide    = Guide.find params[:guide_id]
        @category = Category.find params[:category_id]
        @keys     = @category.category_item_keys
    end

    def update
        @guide    = Guide.find params[:guide_id]
        @category = Category.find params[:category_id]
        @key      = @category.category_item_keys.find params[:id] 

        if @key.update key_params
           redirect_to @guide, success: "Key Updated"
        else
           render 'edit'
        end
    end

    private

    def key_params
       params.require(:category_item_key).permit(:key)
    end
end

#app/views/keys/edit.html.erb
<% @keys.each do |key| %>
   <%= form_for [@guide, @category, key] do |f| %>
      <%= f.text_field :key %>
      <%= f.submit %>
   <% end %>
<% end %> 


If you wanted to use an in-place editor gem, I'd recommend looking at X-Editable, as we've applied it here (its only a demo app, just sign up for free and go to profile):

这篇关于编辑页面以显示所有类别名称,每个类别名称上都有编辑输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆